| 
									
										
										
										
											2025-10-26 15:46:04 +08:00
										 |  |  | using UnrealSharp.Engine; | 
					
						
							|  |  |  | using UnrealSharp.Attributes; | 
					
						
							|  |  |  | using UnrealSharp.BusyRabbit; | 
					
						
							|  |  |  | using UnrealSharp.CoreUObject; | 
					
						
							|  |  |  | using System.Numerics; | 
					
						
							|  |  |  | using UnrealSharp.SpinePlugin; | 
					
						
							| 
									
										
										
										
											2025-10-25 05:53:20 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-26 15:46:04 +08:00
										 |  |  | namespace Level.Role; | 
					
						
							| 
									
										
										
										
											2025-10-25 05:53:20 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-26 15:46:04 +08:00
										 |  |  | [UClass] | 
					
						
							|  |  |  | public class ABusyFoxRole : ABusyPlayerRole | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     private string lastAnimation = ""; | 
					
						
							| 
									
										
										
										
											2025-10-25 05:53:20 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-26 15:46:04 +08:00
										 |  |  |     [UProperty(DefaultComponent = true, AttachmentComponent = "SpineRoot")] | 
					
						
							|  |  |  |     protected USpineBoneFollowerComponent SpineBoneFollower { set; get; }    // 用于跟踪尾巴的运动 | 
					
						
							| 
									
										
										
										
											2025-10-25 05:53:20 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-26 15:46:04 +08:00
										 |  |  |     [UProperty(DefaultComponent = true, AttachmentComponent = "SpineBoneFollower")] | 
					
						
							|  |  |  |     public UBoxComponent FoxTailCollision { set; get; }   // 尾巴碰撞体组件 | 
					
						
							| 
									
										
										
										
											2025-10-25 05:53:20 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-26 15:46:04 +08:00
										 |  |  |     [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); | 
					
						
							| 
									
										
										
										
											2025-10-25 05:53:20 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-26 15:46:04 +08:00
										 |  |  |         SpineBoneFollower.Target = this; | 
					
						
							|  |  |  |         SpineBoneFollower.BoneName = "tail"; | 
					
						
							|  |  |  |         SpineBoneFollower.UseComponentTransform = true; | 
					
						
							|  |  |  |         SpineBoneFollower.UseScale = true; | 
					
						
							|  |  |  |         SetTailCollisionEnabled(false); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2025-10-25 05:53:20 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-26 15:46:04 +08:00
										 |  |  |     protected override void EndPlay(EEndPlayReason endPlayReason) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         base.EndPlay(endPlayReason); | 
					
						
							|  |  |  |         PrintString("haha1"); | 
					
						
							|  |  |  |         MovementComponent.MoveDirectionChangedDelegate.Remove(OnRoleMoveDirectionChanged); | 
					
						
							|  |  |  |         PrintString("haha2"); | 
					
						
							| 
									
										
										
										
											2025-10-25 05:53:20 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-26 15:46:04 +08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2025-10-25 05:53:20 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-26 15:46:04 +08:00
										 |  |  |     [UFunction()] | 
					
						
							|  |  |  |     protected void OnRoleMoveDirectionChanged(FVector2D direction) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         string currAnimation = ""; | 
					
						
							| 
									
										
										
										
											2025-10-25 05:53:20 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-26 15:46:04 +08:00
										 |  |  |         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); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2025-10-25 05:53:20 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 |