見出し画像

【Unity】3Dローグライクゲームの作り方〜Step3-4〜

前回の記事はこちら
前回はユニティちゃんをグリッド操作するところまでを行いました。
申し訳ありませんが、今回から説明はなるべく省いて書くようにします。
わからないことがあればご連絡下さい。

インスペクター上のグリッド座標などの情報を反映させる

気付いた方も多いと思いますが、現状グリッド座標や向きをインスペクター上から変更しても、反映されません。これを修正したいと思います。
「PlayerMovement」スクリプトを開いて、以下のメソッドを書いて下さい。

// インスペクターの値が変わった時に呼び出される
void OnValidate()
{
   if (grid.x != ToGridX(transform.position.x) || grid.z != ToGridZ(transform.position.z))
   {
       transform.position = new Vector3(ToWorldX(grid.x), 0, ToWorldZ(grid.z));
   }
   if (direction != RotationToDir(transform.rotation))
   {
       transform.rotation = DirToRotation(direction);
   }
}

/**
* 引数で与えられた回転のベクトルに対応する向きを返す
*/
private EDir RotationToDir(Quaternion r)
{
   float y = r.eulerAngles.y;
   if (y < 45)
   {
       return EDir.Up;
   }
   else if (y < 135)
   {
       return EDir.Right;
   }
   else if (y < 225)
   {
       return EDir.Down;
   }
   else if (y < 315)
   {
       return EDir.Left;
   }

   return EDir.Up;
}

位置や回転がインスペクター上のグリッド座標や向きと異なる時、強制的に値を変更します。これはテストプレイ時でなくとも反映されます。

カメラについて

これより広いマップになりますと、当然ユニティちゃんが動いた時にカメラも動く必要があります。なのでカメラを追従させるようにするスクリプトが必要なのですが......。
すみません、これに関しては既存のスクリプトをお借りしようと思います!
(多分筆者がスクリプトを一から書くよりこれから紹介する方のスクリプトの方が余程優れていますので......)

......という訳で使用させて頂くスクリプトはこちら。

使用方法は上記記事を参考にして下さい。
カメラの調節は皆様にお任せ致します。

文字列を表示する

ゲーム上に文字列を表示してみましょう。ヒエラルキー上で右クリック→「UI」→「テキスト」をクリックします。
すると「Canvas」の階層下に「Text」が追加されます。ゲームタブ上の真ん中辺りにも「New Text」という文字が見えます。以下はフォントサイズを変えてわかりやすくしたものになります。

スクリーンショット 2020-04-27 0.57.16

次回はメッセージクラスの実装を行いたいと思います。

この記事が気に入ったらサポートをしてみませんか?