Menu
CoddyTech

食べ物

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 から盤面のサイズを読み取ります。

challenge icon

チャレンジ

中級

GameManagerを完成させましょう。シーンでは、snakeにヘッドのSnakeを、foodPrefabに赤い球体を設定します。

  1. public Snake snake;、public GameObject foodPrefab;、private Transform food;を追加します。
  2. Start()でfoodPrefabをインスタンス化し、そのTransformをfoodに保持して、MoveFood()を呼び出します。
  3. void MoveFood()を記述します。foodをランダムなセルに配置します。xとzはそれぞれ-snake.edgeからsnake.edgeまで、yは0にします。

Playを押してボード上の食べ物を見つけてから、Checkを押します。

自分で試してみよう

using UnityEngine;

public class GameManager : MonoBehaviour
{
    // ゲームの進行を管理する:エサ、スコア、ゲームオーバー。Chapter 2で実装する。
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Unityゲーム:3Dスネークのすべてのレッスン