Ue4

[UE4]アニメーションモンタージュC ++に関する注記



Notes Animation Montage C



https://zhuanlan.zhihu.com/p/47767283

C ++でモンタージュアニメーションを再生する方法

それがCharacterで実行されると仮定します。ここで、MontagePtrはMontageポインターです。



float DeathAnimDuration = PlayAnimMontage(MontagePtr) / (GetMesh() && GetMesh()->GlobalAnimRateScale > 0 ? GetMesh()->GlobalAnimRateScale : 1)

アニメーションシーケンスを再生するだけの場合は、PlayAnimation()を使用できます。

if (USkeletalMeshComponent *Mesh = GetMesh()) { Mesh->PlayAnimation(AnimSequence, false) }
注:PlayAnimationはAnimSequenceを直接再生できますが、アクションを混在させることはできません。たとえば、攻撃アクションをプレイした後、自動的にアイドル状態に戻ることはできませんが、自動切り替えアクションはモンタージュのスロットを介して完了することができます。

その他の参考資料:
C ++から厳密にアニメーションを再生するにはどうすればよいですか?
https://answers.unrealengine.com/questions/292345/how-can-i-play-animations-strictly-from-c.html



C ++はモンタージュを動的に再生します(AnimSequenceによって作成されました)

キーワード:UE4、C ++、AnimSequence、AnimMontage、スロット、動的作成、アニメーションの再生

まず、アニメーションブループリントにスロットノードを追加します。デフォルトのスロット名はDefaultSlotです。この名前はC ++コードで使用されます



再生するAnimSequenceオブジェクトポインタが取得されていると仮定します。AnimSeq

float AnimLength = 0.f if (USkeletalMeshComponent *Mesh = MyActor->FindComponentByClass()) { if (UAnimInstance *AnimInst = Mesh->GetAnimInstance()) { if (UAnimMontage* Mtg = AnimInst->PlaySlotAnimationAsDynamicMontage(AnimSeq, TEXT('DefaultSlot'), 0.25f, 0.25f, 1.f, 1)) { AnimLength = Mtg->GetPlayLength() } } }
UAnimInstance :: PlaySlotAnimationAsDynamicMontage()を使用してモンタージュを再生する場合、アニメーションシーケンスのNotifyパラメーターは、動的に生成されたモンタージュに対して引き続き有効です。つまり、モンタージュも同じ通知をトリガーします。
PlaySlotAnimationAsDynamicMontage()を使用してモンタージュを再生する場合、ループしているモンタージュでない場合は、再生後にUAnimInstance :: Montage_Stop()を実行して現在のモンタージュを停止する必要があります。そうしないと、ブループリントアニメーションのロジックに干渉し、他のモンタージュを切り替える場合は無効です。

モンタージュアニメーションを再生するときは、アクションを最後のフレームにとどまらせます

キーワード:UE4、モンタージュ、C ++、再生速度、再生速度、加速再生、減速再生

3つの方法
方法1:フリーズするフレームで、SkeletonComponentのGlobalAnimRateScaleプロパティを0に設定します。
たとえば、3番目のフレームでキャラクターのボーンをフリーズさせたい場合は、アニメーションが3番目のフレームに達したときにこのプロパティを0に設定します。

ACharacter::GetMesh()->GlobalAnimRateScale = 0.f

方法2:

ACharacter::GetMesh()->bNoSkeletonUpdate = true

方法3:

ACharacter::GetMesh()->bPauseAnims = true
注:AnimSequenceが通常どおり再生される場合、ループ再生に設定されていない限り、再生後、自動的に最後のフレームに留まります。上記のプロパティは、モンタージュをプレイする場合にのみ設定する必要があります。

C ++はモンタージュの指定されたセクションを再生します

方法1:
3番目のパラメーターStartSectionNameを介してセクションを指定します

float ACharacter::PlayAnimMontage(class UAnimMontage* AnimMontage, float InPlayRate = 1.f, FName StartSectionName = NAME_None)

方法2:
使用UAnimInstance::Montage_JumpToSection()

if (USkeletalMeshComponent *Mesh = Character->GetMesh()) { if (UAnimInstance *AnimInst = Mesh->GetAnimInstance()) { Char->PlayAnimMontage(MontagePtr) AnimInst->Montage_JumpToSection(FName('step_03'), MontagePtr) } }
Montage_JumpToSectionを実行するときは、キャラクターアニメーションがセクションが属するモンタージュの再生状態にあることを確認してください。そうでない場合、JumpToSectionは無効になります。

モンタージュセクションスイッチが無効です(2018-02-11)

キーワード:UE4モンタージュセクションが機能しない

問題の現象:
SetNextSectionはエディターでは正常に機能しますが、パッケージバージョンでは機能しません。

解決:
SetNextSectionをJumpToSectionに置き換えます。

参照元:モンタージュの不要なセクションの切り替え
https://answers.unrealengine.com/questions/172537/montage-unwanted-section-switching.html

セクション時間が非常に短い場合は、[ブレンドイン]と[ブレンドアウト]を小さい値に設定するか、0(デフォルトは0.25)に設定する必要があります。そうしないと、JumpToSectionは効果がありません。

モンタージュループ

アニメーションブループリントを使用してアニメーションの切り替えを制御する場合、アニメーションステートマシンを直接使用してAnimSequenceを指定できます。アニメーションブループリントは、指定されたAnimSequenceをステートマシンに従って自動的に再生するため、他の設定は必要ありません。
C ++を使用してモンタージュをプレイする場合は、次の詳細に注意する必要があります。

  1. 既存のモンタージュリソースを使用している場合は、次のように、再生をループするようにモンタージュを設定する必要があります。
    モンタージュ編集ウィンドウを開いた後、最初に位置1をクリックし、次に位置2をクリックします(マウスの左ボタンですべてクリックします)

次に、プレビューセクションのプログレスバーにXが表示されます。これは、モンタージュがループで再生されていることを意味します。

後で実行ACharacter::PlayAnimMontage()指定したモンタージュを自動的にループさせることができます。 PlayAnimMontage()は一度だけ実行する必要があります。

2.モンタージュを動的に作成して再生する場合は、LoopCount 9999などの十分な大きさに設定する必要があります。このようにして、現在のモンタージュはループで再生されます。

AnimInstance->PlaySlotAnimationAsDynamicMontage(AnimSeq, TEXT('DefaultSlot'), 0.25f, 0.25f, 1.f, 9999))
この方法は実行可能ですか。モンタージュをループに設定せずに、ティックで前のモンタージュの累積再生時間を継続的に確認し、ブロードキャストが終了したらすぐに次の再生を実行します。答えは実行可能ではありません! !実際の効果は次のとおりです。2つのモンタージュ再生の間にアイドル状態のアニメーションへの短時間の切り替えがあります。

モンタージュの再生を停止する

現在再生中のモンタージュを停止したい場合は、StopAnimMontage():を実行してください。

void ACharacter::StopAnimMontage(class UAnimMontage* AnimMontage)
アニメーションフュージョンエフェクトを使用してモンタージュの再生を停止する場合は、モンタージュのブレンドアウト時間を0より大きい値(デフォルト値の0.25など)に設定することを忘れないでください。

モンタージュが切り替わるときに統合の問題はありません

理由:
モンタージュパラメータBlend In 0に設定されます。

解決:
Montage Blend In(ブレンドオプション->ブレンドイン->ブレンド時間)のパラメータが、デフォルト値の0.25などの0より大きい値に変更されました。