敵をクリックして攻撃
10章まで終えた。
Unityゲーム開発 オンライン3Dアクションゲームの作り方
- 作者: 竹内大五郎,石黒赳彦,高橋誠史,香川寛和,河本健太郎
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2014/12/04
- メディア: Kindle版
- この商品を含むブログを見る
メモ
- 10章ラストのクリックして攻撃ができない
PlayerCtrl.csのChangeState()が動いてるか不明だったからDebug.Log(nextState)
を挿入して実行するときちんとAttackingに遷移していることを確認。
もしかするとスクリプトからAnimatorControllerのAttack状態に遷移できてない?(CharacterStatus.csのAttacking変数がTrueになってもAnimatorのAttackingパラメータに反映されない)
→9-11のCharaAnimation.cs差し替え忘れてた
これだとC#変数からAnimatorControllerを制御出来てなくてクリック攻撃できない。
- なんか状態遷移がポーリングしてるみたいでアニメーションの切り替えが遅い。即座に状態遷移されない
Animatorの状態遷移の設定項目に「Has Exit Time」チェックボックスがある。
これがONだとアニメーション1ループするまで次の状態に遷移しない。
OFFだとアニメーションの途中でも遷移するようになる。
参考書だとConditionsに最初から存在するExitTime変数を設定するようあるけど、今のバージョン(5.3.8p2)だと存在しないので注意。
ループ系モーションのHas Exit Timeを全てOFFにしたらいい感じになった。
2/18追記 攻撃系モーションとかはキャンセルできると強すぎなのでONのままにするか別途工夫が必要そう。
- Attack状態からStayに戻らない
延々と蹴り続けるバグに見舞われた。
ちゃんとイベント発火してるか不明だったからCharaAnimation.csのEndAttack()にデバッグプリントいれたけど無反応。
今回自作の球体モデルのキックモーションでやってたからハマったんだと思うけど、アニメーションの95%位の地点にEndAttackイベントを配置していたのに反応しない。
Attack状態のInspectorみるとAttackとStayがシームレスに遷移させるようなグラフがあって設定できるみたいだけどこれでAttackが全部実行されるようにしたけど上手くいかなかった。
そもそもキックモーション10フレームと超短かったのでスピードを0.5にしたらEndAttack()が起動するようになった。よくわからん。
サンプルモデルのAttackモーションならハマらないと思う。
2/18追記 スピード1に戻したら問題直ってた。謎
- 敵に攻撃すると「SendMessage Damage has no receiver!」エラーが出る
攻撃受けたオブジェクトがHitArea.csの8行目transform.root.SendMessage ("Damage",attackInfo);
によって親オブジェクトにダメージを伝播させる処理があるんだけど10章では受け取るスクリプトを設定してないのでエラーになる。
でも10章最後にPlayerが攻撃するとWargのHPが減るのが確認できるとか書いてある…
11章最初に載ってるEnemyCtrl.csをWargに適用してあげるとちゃんと倒せる
はげそう