poi’s tech blog

3D多人数同時接続型球体アクション成人向けゲーム開発のためのアイデア、ナレッジ

敵をクリックして攻撃

10章まで終えた。

f:id:poipoipoip:20190217130716g:plain
げしげし

Unityゲーム開発 オンライン3Dアクションゲームの作り方

Unityゲーム開発 オンライン3Dアクションゲームの作り方

メモ

  • 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が全部実行されるようにしたけど上手くいかなかった。

f:id:poipoipoip:20190217132145p:plain
Attack状態のInspector

そもそもキックモーション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に適用してあげるとちゃんと倒せる

はげそう