『Unity5ゲーム開発レシピ』「Part02 応用編 Chapter01 キャラクターを制御する」 学習記録

Unity5ゲーム開発レシピ ハマるゲーム制作のノウハウ

Unity5ゲーム開発レシピ ハマるゲーム制作のノウハウ

序文

『Unity5ゲーム開発レシピ』17日目。

これから応用編に入るんですが、応用編はまずサンプルデータありきでTipsを解説していくような構成になっているようです。
んーで、そのサンプルデータが最新版のUnity(2018)だとちゃんと開けない感じだったので、昨日は旧いバージョンのUnityをインストールしたり改めて環境構築しておりました。

進捗

  • Part02 応用編
    • Chapter01 モーションをキャンセルして次のモーションに切り替えるには

(学習時間:1時間)

コード実装部分

\Chapter1\dungeon\assets\Scripts\ChainAction.cs

using UnityEngine;
using System.Collections;

public class ChainAction : StateMachineBehaviour
{
    public float startTime;
    public float endTime;
    
    // Animator用のUpdateメソッド?
    override public void OnStateUpdate (Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        // stateInfo.lengthはアニメーション全体の長さ
        // normalizedTimeはアニメーション開始時を0・再生後を1とした値
        float currentTime = stateInfo.length * (stateInfo.normalizedTime % 1f);

        // アニメーション中にスペースが押された場合、トリガーを発動させる
        if (Input.GetKeyDown(KeyCode.Space) && currentTime > startTime && currentTime < endTime) {
            animator.SetTrigger ("ChainSucceed");
        }
    }
    
    override public void OnStateExit (Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        // ステートを抜ける時にトリガーをリセットする
        animator.ResetTrigger ("ChainSucceed");
    }
}

実行結果

www.youtube.com

感想

やったこと。

  • スペースキーを押すと、モーション途中でも次のモーションに切り替わる仕組みの実装

字面だけ見ると、それくらい簡単に実装できるだろ!って思っちゃうけど、割と面倒なんですねぇ。

どうやら応用編からライターの方が変わった(おそらくBATA氏→まつだす氏)ようで、コードにコメントを書かないスタイルになってしまったので、自分でしっかり調べていかないといけない。

stateInfo.normalizedTimeを1fで剰余している意味は、1.0という値にしないためだろうか。
どういう意味があるのかは正直よくわからない。

あ、応用編は基本編みたく1つのゲームを作りあげていく流れじゃなくて、各Tipsごとにその都度サンプルデータをDLして、機能を実装していくかたちになるようです。
そんなことでGitHubにあげるのは自重。

カロリーメイトください。

BGM

少年ジャンプデストラクション / THE 君に話すよ

www.youtube.com