83 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using UnrealSharp.Engine;
 | 
						|
using UnrealSharp.Attributes;
 | 
						|
using UnrealSharp.BusyRabbit;
 | 
						|
using UnrealSharp.CoreUObject;
 | 
						|
using System.Numerics;
 | 
						|
using UnrealSharp.SpinePlugin;
 | 
						|
 | 
						|
namespace Level.Role;
 | 
						|
 | 
						|
[UClass]
 | 
						|
public class ABusyFoxRole : ABusyPlayerRole
 | 
						|
{
 | 
						|
    private string lastAnimation = "";
 | 
						|
 | 
						|
    [UProperty(DefaultComponent = true, AttachmentComponent = "SpineRoot")]
 | 
						|
    protected USpineBoneFollowerComponent SpineBoneFollower { set; get; }    // 用于跟踪尾巴的运动
 | 
						|
 | 
						|
    [UProperty(DefaultComponent = true, AttachmentComponent = "SpineBoneFollower")]
 | 
						|
    public UBoxComponent FoxTailCollision { set; get; }   // 尾巴碰撞体组件
 | 
						|
 | 
						|
 | 
						|
    [UFunction(FunctionFlags.BlueprintEvent)]
 | 
						|
    public void SetTailCollisionEnabled(bool bIsEnable){}
 | 
						|
    protected override void BeginPlay()
 | 
						|
    {
 | 
						|
        base.BeginPlay();
 | 
						|
        lastAnimation = "Idle/Front";
 | 
						|
        SpineAnimationComponent.SetAnimation(0, lastAnimation, true);
 | 
						|
        MovementComponent.MoveDirectionChangedDelegate.Add(OnRoleMoveDirectionChanged);
 | 
						|
 | 
						|
        SpineBoneFollower.Target = this;
 | 
						|
        SpineBoneFollower.BoneName = "tail";
 | 
						|
        SpineBoneFollower.UseComponentTransform = true;
 | 
						|
        SpineBoneFollower.UseScale = true;
 | 
						|
        SetTailCollisionEnabled(false);
 | 
						|
    }
 | 
						|
 | 
						|
    protected override void EndPlay(EEndPlayReason endPlayReason)
 | 
						|
    {
 | 
						|
        base.EndPlay(endPlayReason);
 | 
						|
        PrintString("haha1");
 | 
						|
        MovementComponent.MoveDirectionChangedDelegate.Remove(OnRoleMoveDirectionChanged);
 | 
						|
        PrintString("haha2");
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
    [UFunction()]
 | 
						|
    protected void OnRoleMoveDirectionChanged(FVector2D direction)
 | 
						|
    {
 | 
						|
        string currAnimation = "";
 | 
						|
 | 
						|
        if (direction.Equals(Vector2.Zero))  // Idle的情况
 | 
						|
        {
 | 
						|
            var forwardDirection = MovementComponent.ForwardDirection;
 | 
						|
            if (forwardDirection.Y > 0)
 | 
						|
            {
 | 
						|
                currAnimation = "Idle/Front";
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                currAnimation = "Idle/Back";
 | 
						|
            }
 | 
						|
        }
 | 
						|
        else
 | 
						|
        {
 | 
						|
            if (direction.Y >= 0)
 | 
						|
            {
 | 
						|
                currAnimation = "Move/Front";
 | 
						|
            }
 | 
						|
            else
 | 
						|
                 currAnimation = "Move/Back";
 | 
						|
        }
 | 
						|
        if (currAnimation != lastAnimation)
 | 
						|
        {
 | 
						|
            lastAnimation = currAnimation;
 | 
						|
            SpineAnimationComponent.SetAnimation(0, currAnimation, true);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
 |