食べ物
Coddyの「Unityゲーム:3Dスネーク」コースのレッスン 5/14。
食べ物はランダムなセルに配置されます。セルは整数なので、x と z には Random.Range の int 版を使います。int では最大値は含まれません。Random.Range(1, 7) はサイコロを振るのと同じで、1 から 6 が出て、7 は出ません。ある数を含めるには、その数より 1 大きい値を指定します。
float 引数を使うと、Random.Range は 3.62 のような中間の数値も返します。これはセルの中央ではないため、ヘビは食べ物に決して出会えません。0 から 9 のセルがある 10×10 のグリッド上の宝箱の場合:
int row = Random.Range(0, 10); // 0から9まで
int column = Random.Range(0, 10);
chest.position = new Vector3(column, 0f, row);盤面に置ける食べ物は一度に 1 つだけなので、ゲームでは Start() 内で一度だけ作成し、新しい場所が必要になるたびに移動させます。食べ物は GameManager が管理し、snake フィールドを通じて、ヘビの edge から盤面のサイズを読み取ります。
チャレンジ
中級GameManagerを完成させましょう。シーンでは、snakeにヘッドのSnakeを、foodPrefabに赤い球体を設定します。
public Snake snake;、public GameObject foodPrefab;、private Transform food;を追加します。Start()でfoodPrefabをインスタンス化し、そのTransformをfoodに保持して、MoveFood()を呼び出します。void MoveFood()を記述します。foodをランダムなセルに配置します。xとzはそれぞれ-snake.edgeからsnake.edgeまで、yは0にします。
Playを押してボード上の食べ物を見つけてから、Checkを押します。
自分で試してみよう
using UnityEngine;
public class GameManager : MonoBehaviour
{
// ゲームの進行を管理する:エサ、スコア、ゲームオーバー。Chapter 2で実装する。
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。