操作説明を作ろうとして、ずいぶんと迷走している。
Timelineで作ろうとしているのだが、どうしてもTimeline上のAnimationClipを作動させると色々と弊害が出てしまう。
確認できただけで、ざっとこんな感じ。
①AnimationClipの動きに沿ってPlayerが移動してしまう。
②なぜかPlayerがゆっくりと上に移動してしまう。
③Objectの向きが一回しか変えられない。
Playerがアニメに沿って移動してしまうのは、普通に考えると、ObjectのAnimatorの設定で「ルートモーションを適用」
のチェックを外せば解決しそうなものだけど
Timelineの場合だと、これでは解決してくれない。
どこかの記事で、AnimationClip自体のインスペクターで、「ポーズにベイク」にチェックを入れると良いような記載を
見つけたのだけど、
移動はしなくなったけど、なんか違う😭
理想は、これ。
・・・明らかに別物😭
こんな感じで、ここ数日、ずっと解決方法の実験を繰り返していた。
うまくいったと思っても、同じ動作を何回か繰り返すように組むと、なぜか問題が再発してしまう。
原因がわからないままに、随分と時間をかけてしまった。
多分、推測だけど、Timelineで動かすAnimationClipは、最初からTimeline用に作る必要があるんじゃないだろうか。
ゲーム用のAnimationClipの、動作だけを流用しようとしているから、それで上手くいかない様な気もする🧐
ではTimelineなしでムービーを作ろうとしたけれど、ちょっとやってみただけで、追加するObjectの多さに早々に諦めてしまった🤣
Timelineだと簡単なImageのSpriteの変更も、スクリプトでやろうとすると、ImgaeとSpriteを変数に格納させないといけない訳で。
つまり、ムービーで動かすObjectを全て変数に取り込む必要があるので、大量の変数を作らないと・・・・と、諦めてしまった😆
散々迷って、迷走して、悩んだ結果。
大筋はTimelineで作って、プレイヤーのアニメだけをスクリプトで制御する事にした。
Timelineからスクリプトを制御するのは、TimelineSignalを使ってイベントを発生させてやる。
そして、イベントで実行されるスクリプトは普通に作ってやる。
public class Operating : MonoBehaviour { [SerializeField] private Animator animator; [SerializeField] Transform Player; public void PlayerRun() { animator.SetBool("run",true); } public void PlayerLeft() { Player.eulerAngles=new Vector3(0,270,0); } public void PlayerBack() { Player.eulerAngles=new Vector3(0,180,0); } public void PlayerRight() { Player.eulerAngles=new Vector3(0,90,0); } public void PlayerIdle() { Player.eulerAngles=new Vector3(0,180,0); animator.SetBool("run",false); } }
それぞれのメソッドをTimeline Signalのイベントで呼んでいる。
これで、どうにか思っていた形になった。
ようやく先に進められそうだ😆
2月中には完成したいな〜