| @ -1,54 +1,82 @@ | ||||
| // local LevelFoxRole = {} | ||||
| // local Vector2D = require("Utils.Vector2D") | ||||
| using UnrealSharp.Engine; | ||||
| using UnrealSharp.Attributes; | ||||
| using UnrealSharp.BusyRabbit; | ||||
| using UnrealSharp.CoreUObject; | ||||
| using System.Numerics; | ||||
| using UnrealSharp.SpinePlugin; | ||||
|  | ||||
| // function LevelFoxRole:ctor() | ||||
| namespace Level.Role; | ||||
|  | ||||
| // end | ||||
| [UClass] | ||||
| public class ABusyFoxRole : ABusyPlayerRole | ||||
| { | ||||
|     private string lastAnimation = ""; | ||||
|  | ||||
| // function LevelFoxRole:ReceiveBeginPlay() | ||||
| // 	self["SpineAnimationComponent"]:SetAnimation(0, "Idle/Front", true) | ||||
| //     self.last_animation = "Idle/Front" | ||||
|     [UProperty(DefaultComponent = true, AttachmentComponent = "SpineRoot")] | ||||
|     protected USpineBoneFollowerComponent SpineBoneFollower { set; get; }    // 用于跟踪尾巴的运动 | ||||
|  | ||||
| //     self["SpineBoneFollower"].Target = self | ||||
| //     self["SpineBoneFollower"].BoneName = "tail" | ||||
| //     self["SpineBoneFollower"].UseComponentTransform = true | ||||
| //     self["SpineBoneFollower"].UseScale = true | ||||
|  | ||||
| //     self["TailCollision"]:SetCollisionEnabled(0) | ||||
| // end | ||||
|     [UProperty(DefaultComponent = true, AttachmentComponent = "SpineBoneFollower")] | ||||
|     public UBoxComponent FoxTailCollision { set; get; }   // 尾巴碰撞体组件 | ||||
|  | ||||
|  | ||||
| // function LevelFoxRole:OnMoveDirectionChanged(InDirection) | ||||
| //     -- 运动组件更新方向响应函数 | ||||
| //     local cur_animation | ||||
| //     if Vector2D.Equals(InDirection, Vector2D.Zero) then -- Idle的情况 | ||||
| //         local forward_direction = self["MovementComponent"]:GetForwardDirection() | ||||
| //         if(forward_direction.Y >= 0) then | ||||
| //             cur_animation = "Idle/Front" | ||||
| //         else | ||||
| //             cur_animation = "Idle/Back" | ||||
| //         end | ||||
| //     else | ||||
| //         if(InDirection.Y >= 0) then | ||||
| //             cur_animation = "Move/Front" | ||||
| //         else | ||||
| //             cur_animation = "Move/Back" | ||||
| //         end | ||||
| //     end | ||||
| //     if cur_animation ~= self.last_animation then | ||||
| //         self["SpineAnimationComponent"]:SetAnimation(0, cur_animation, true) | ||||
| //         self.last_animation = cur_animation | ||||
| //     end | ||||
|     [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); | ||||
|  | ||||
| //     self["SpineAnimationComponent"]:SetTimeScale(1.0) | ||||
| // end | ||||
|         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); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
|  | ||||
| // function LevelFoxRole:OnMove(location) | ||||
| //     -- 控制器移动相应函数 | ||||
| //     self["MovementComponent"]:MoveTo(location) | ||||
| // end | ||||
|  | ||||
|  | ||||
|  | ||||
| // return Class(nil, nil, LevelFoxRole) | ||||
		Reference in New Issue
	
	Block a user