(この記事の使用環境: Unity 2018.1.0b9 Personal、Visual Studio Community 2017, Windows10)

Survival Shooter tutorial をやってみたので

これ ↓ をやってみたので、ポイントをメモしておこうかなと。備忘録的なやつ。

4572eb59-2fbb-4005-8fe6-6a81d51d16fe_scaled

ではさっそく。

public変数の定義時に初期化した値はインスペクターの初期値になる

  • Start内で初期化するのとは意味が異なる。

PlayerMovement.cs

  • 書き方がすっきりしていて分かりやすい。Playerの動作を Move, Turning, Animating に分けてメソッド化している
  • Turningでは、マウス位置とFloorのぶつかった位置を取得し、Playerとの相対位置から新しい向きを求め、Rigidbody.MoveRotation している
  • FloorはQuadで作成し、MeshRendererは削除する。FloorのLayerはFloorにしておく
  • 移動量や回転量にはTime.deltaTimeを掛けることによって、環境差異を吸収できる(やったほうがよい)
  • 物を動かす処理はUpdate内ではなくFixedUpdate内で処理されるようにする

PlayerやEnemyを余計な物理演算で動かさない

  • PlayerやEnemyを(コライダーによる衝突は有効のまま)余計な物理演算で動かさないようにするためのRigidbodyの設定
  • DragとAngularDragの値をInfinityにする
  • ConstraintsFreeze Position・Freeze Rotationを適切に設定する
    png
  • 障害物等と物理的にぶつかるためのコライダーとは別に、PlayerShotとの近接判定を行うコライダー(IsTrigger)をセットする(前者より少し大きく。攻撃開始/終了の判定に用いる)

UIの作成・設定

  • Canvasの子要素全体の振る舞いを指定するのにCanvasGroupコンポーネントを使うと便利(Alpha、Intaractable、Block Raycasts)
    png
  • UIの編集をする際にはSceneビューの2Dボタンを押すとやりやすくなる
  • HealthUIの作り方(スライダー使用)← (現バージョンなら)ScrollBarを使ったほうが作りやすそう
  • Color.clear はRGBA を (0, 0, 0, 0) にする
  • SceneビューでのCanvas内でのUI要素の並び順はそのまま描画順になる
    png
  • ScreenFaderとGameOverTextはAの値を0にして透明にしておき、必要なときにAの値を上げて表示する
  • CanvasゲームオブジェクトのAnimationの設定を行う。ゲームオーバーの際、GameOverText:Scale, GameOverText:Text.Color.a, ScoreText:Scale, ScreenFader:Image.Color.a を時間経過に応じてアニメーションで動かす。
    png

AnimationClipのEvent設定

  • Animationの編集画面(Inspector)でEventからpublicメソッドを呼び出す設定ができる。(ただし、あとで見つけにくいので注意が必要かも)
    png

敵キャラの発生

  • EnemyをSpawnさせるEnemyManager.csでは、SpawnPointは複数指定するが、Enemyはひとつだけ指定するようになっている。これはEnemyManager.cs自体を複数アタッチし、敵種類ごとに設定する使い方のため。
    png

気になったこと、バージョン差異による設定差異など

  • PlayerMovement.cs : FixedUpdateのなかでInputをとっていいのかな?(入力の取得漏れが発生するのでInputはUpdate内に書いたほうがいいという情報あり)
  • PlayerAC:Transition(Idle -> Move, Move -> Idle)で HasExitTime のチェックを外す必要あり
  • PlayerAC:Transition(Any State -> Death)でCan Transition To Self のチェックを外す必要あり

今回は以上です。