[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をクリックし、次に位置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より大きい値に変更されました。