実現したいこと
にわとりが5秒毎に卵を生みます。
その際にジャンプするアニメーションが実行されます。
開発環境
IDE:Rider
Unity:2021.3.91
OS:Windows10
実装
animationの設定
animationはアセットに既にあるので、それを利用します。
animatorの設定
animatorの設定をする
図のようにステートマシンを繋げます。
最初はwalkを実行し、walk→jumpとjump→walkと遷移するようにします。
パラメータはTrigger型を1つ加えます。
walk→jumpの設定
walk→jumpの矢印部分のインスペクターを開きます。
終了時間ありを非活性にすることでwalkアニメーションがループ実行されます。
ConditionにTriggerを加えます。トリガーが発火するまでwalkアニメーションを実行します。トリガー発火後はjumpアニメーションに遷移します。
jump→walkの設定
jump→walkの矢印部分のインスペクターを開きます。
1回実行したらwalkに遷移するよう 終了時間ありを活性にします。
ConditionにTriggerは追加しません。
jumpアニメーションを実行した後,walkに戻ります。
動作確認
手動でtriggerを発火して動作確認します。(以下gif参照)
スクリプトの実装
コード部分
5秒おきにアニメーションを実行するようにスクリプトを作成します。
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Chicken : MonoBehaviour
{
private bool isMakeEgg=true;
// UIの更新で使う
public static Action OnMakeEgg;
private Animator _animator;
void Start()
{
_animator = GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
if (isMakeEgg == true)
{
isMakeEgg = false;
StartCoroutine(IEMakeEgg(5));
}
}
private IEnumerator IEMakeEgg(float makeTime)
{
+ _animator.SetTrigger("trigger");
yield return new WaitForSeconds(makeTime);
Debug.Log("卵を生みました。");
isMakeEgg = true;
OnMakeEgg?.Invoke();
}
}
動作確認
作成したスクリプトをAnimatorと同じオブジェクトにアタッチします。
期待した動きを確認できます。
参考
素材はアセットストアより
設定の仕方がとても役立った
公式ドキュメント