
- 作者: BATA,まつだす
- 出版社/メーカー: 翔泳社
- 発売日: 2016/01/23
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る
序文
『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"); } }
実行結果
感想
やったこと。
- スペースキーを押すと、モーション途中でも次のモーションに切り替わる仕組みの実装
字面だけ見ると、それくらい簡単に実装できるだろ!って思っちゃうけど、割と面倒なんですねぇ。
どうやら応用編からライターの方が変わった(おそらくBATA氏→まつだす氏)ようで、コードにコメントを書かないスタイルになってしまったので、自分でしっかり調べていかないといけない。
stateInfo.normalizedTimeを1fで剰余している意味は、1.0という値にしないためだろうか。
どういう意味があるのかは正直よくわからない。
あ、応用編は基本編みたく1つのゲームを作りあげていく流れじゃなくて、各Tipsごとにその都度サンプルデータをDLして、機能を実装していくかたちになるようです。
そんなことでGitHubにあげるのは自重。
カロリーメイトください。
BGM
少年ジャンプデストラクション / THE 君に話すよ