Unity3D
U

UnityでsetTriggerで一回のみ遷移してほしいアニメーションが2度遷移される問題

書きなぐりメモです。

Unityでスペースボタンを押したらキャラクターがジャンプするようにスクリプトとアニメーションを組みましたが、スペースボタンを押すと2度実行される問題に悩まされました。
結論を言ってしまうと、アニメーション側には問題はなく、スクリプト側のユーザー入力処理において、ボタンが押された場合ではなく、ボタンが押されている間処理が実行される処理になっていたのが原因でした。

sample.cs
    void Update () {
        //...
        if (Input.GetKey ("space")) {
            animator.SetTrigger ("on_jump");
        }
    }

上で記述されているInput.GetKeyでは、キーを押している間常にtrueとなります。
フレーム毎に呼ばれるUpdate処理では1クリックのつもりでも複数回true判定となってしまいます。
(実際、デバッグログ仕込んだところ、1ボタンで4〜5回呼ばれてました。)

ボタンが一度だけ押されたかどうかを判定するには、Input.GetKeyDownを使います

sample.cs
    void Update () {
        //...
        if (Input.GetKeyDown ("space")) {
            animator.SetTrigger ("on_jump");
        }
    }

なんという初歩的なミスorz