【Unity】アニメーターの遷移にORの条件をつける

投稿者: | 2020-09-13

アニメーターコントローラーで次のステートに遷移するときに、「または」を使った条件を設定します。

まず2つのトリガーパラメーターと、2つのステートを行き来する遷移を作ります。

右側の矢印をクリックしてインスペクタのConditionsに、2つのトリガーパラメーターの条件を追加してみます。Has Exit Timeは外します。

これだと、Conditionsに設定した条件が全て満たされないと遷移しないので、両方のトリガーがセットされないといけません。

using UnityEngine;

public class TestScript : MonoBehaviour
{
    Animator animator;

    // Start is called before the first frame update
    void Start()
    {
        animator = GetComponent();
    }

    // Update is called once per frame
    void Update()
    {
        // 左クリック
        if (Input.GetMouseButtonDown(0)) animator.SetTrigger("Trigger1");

        // 右クリック
        if (Input.GetMouseButtonDown(1)) animator.SetTrigger("Trigger2");
    }
}

片方のクリックでは遷移せず、もう片方もクリックされないと遷移しないのがわかります。

Trigger1とTrigger2のどちらかがセットされると遷移するようにするには、遷移の矢印をもう一本付けます。遷移を作るには、ステートを右クリックしてMake Transitionを選択し、遷移先のステートをクリックします。

三角形が3つ並んだ方の矢印を選択してインスペクタを見ると、Transitionsに遷移がもう一つ追加されています。

片方の遷移を選択し、Trigger2の条件だけを設定します。

もう片方はTrigger1だけにします。

これで2つの条件のどちらかが満たされたときに遷移するようになります。

2つの遷移の名前が同じでわかりにくいですが、遷移には自由に名前をつけることができます。また、マイナスボタンで選択中の遷移を削除できます。

この名前はAnimator.GetAnimatorTransitionInfoを使って遷移中か調べるときに使えます。

Animator animator;
animator = GetComponent();

// Trigger1を通って遷移している時
if(animator.GetAnimatorTransitionInfo(0).IsUserName("Trigger1"))
{
    Debug.Log("Trigger1");
}

こうすると、同じ矢印を通っても、右クリックのときはメッセージが表示されません。

コメントを残す

メールアドレスが公開されることはありません。