UnityのPlayabeでアニメーションを再生するために下のコードを書きました。
void Update() { if (movementDif == Vector3.zero) { AnimationPlayableUtilities.PlayClip(anim, IdleClip, out playableGraph); } else { AnimationPlayableUtilities.PlayClip(anim, runClip, out playableGraph); } }
ですが、これだと条件がtrueの間はアニメーションが毎フレーム連続再生されてしまって、アニメーションが停止しているような状態に見えてしまいます。
そこで、条件がtrueになった瞬間だけ処理を実行するようなコードを書きたいのですが、どういう風に書けば良いのかがわかりません。
void Update() { bool IdleSet = false; bool runSet = false; if (movementDif == Vector3.zero) { IdleSet = true; } if (movementDif != Vector3.zero) { runSet = true; } if (IdleSet == true) { AnimationPlayableUtilities.PlayClip(anim, IdleClip, out playableGraph); IdleSet = false; } if(runSet == true) { AnimationPlayableUtilities.PlayClip(anim, runClip, out playableGraph); runSet = false; } }
このようなコードを書けば、条件がtrueになった瞬間だけ処理を実行できますが、次のフレームでまた同じく条件がtrueになれば、結局連続で実行されてしまいます。
少し調べたところ、「UniRxというライブラリを使えば関数を一回だけ実行できる」というような情報が見つかったので、見よう見まねで
void Start() { this.UpdateAsObservable() .First(x => movementDif == Vector3.zero) .Subscribe(x => AnimationPlayableUtilities.PlayClip(anim, IdleClip, out playableGraph)); this.UpdateAsObservable() .First(x => movementDif != Vector3.zero) .Subscribe(x => AnimationPlayableUtilities.PlayClip(anim, runClip, out playableGraph)); }
このようなコードを書いてみましたが、Start関数に書いているためか、アニメーションが切り替わりません。
Update関数に書くと、またさっきと同じように連続再生されてほぼ停止しているような挙動になります。
1時間ほど色々調べて自己解決を試みたのですが上手くできませんでした。
条件がtrueになった瞬間のみ処理を実行するコードの書き方を教えてください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。