1.創建一個動畫實例
2.創建該實例的c++子類
3.繼續創建該類的子類,但是作用是用來鏈接(以后會詳細解釋)
4.基于PlayerAnimInstance類創建一個子類
5.目前一共創建了四個c++類,
最基的類
角色的類
玩家控制的角色的類
玩家控制的角色的武器的類
6.進入XMBCharcterAnimInstance,覆寫
public:// 自定義初始化邏輯(例如設置骨骼引用、動畫曲線等)virtual void NativeInitializeAnimation() override;//這個函數在一個工作線程上運行而不是在游戲線程上運行,意味著使用此函數計算需要的所有變量可以相當優化virtual void NativeThreadSafeUpdateAnimation(float DeltaSeconds) override;
創建變量
protected://設置基于角色來獲取類型UPROPERTY()ACharacterBase* OwningCharacter;//移動組件UPROPERTY()UCharacterMovementComponent* OwningMovementComponent;//行走速度UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category = "AnimData")float GroundSpeed;//是否有加速度UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category = "AnimData")bool bHasAcceleration;
7.實現函數
//目的:在初始化動畫中獲取我們需要的關鍵變量
void UXMBCharacterAnimInstance::NativeInitializeAnimation()
{//獲取當前所有者OwningCharacter = Cast<ACharacterBase>(TryGetPawnOwner());if (OwningCharacter){OwningMovementComponent = OwningCharacter->GetCharacterMovement();}
}//在更新動畫中獲取我們的藍圖動畫需要的變量
void UXMBCharacterAnimInstance::NativeThreadSafeUpdateAnimation(float DeltaSeconds)
{if (!OwningCharacter || !OwningMovementComponent){return;}//獲取當前Owner的移動速度和加速度GroundSpeed = OwningCharacter->GetVelocity().Size2D();//判斷Owner是否具有加速度bHasAcceleration = OwningMovementComponent->GetCurrentAcceleration().SizeSquared2D() > 0.f;
}
8.啟動引擎,創建一個屬于PlayerAnimInstance的動畫藍圖
創建好后選擇這個,并且能看到變量內有自己創建的變量,則成功
9.創建一個混合空間,選擇
創建好后打開,在左側欄填入變量名稱,并且把x值最大改為400,
10.進入動畫藍圖,創建一個狀態機
11.設置狀態機
12.設置完后進入角色藍圖,然后設置對應的藍圖動畫即可