盤面
Coddyの「Unityゲーム:3Dスネーク」コースのレッスン 1/14。
このコースでは、3DのSnakeを作ります。上から見た15×15の盤上に、立方体でできたヘビがいます。ヘビは1セルずつ移動し、矢印キーまたはWASDで方向転換し、エサを食べて成長し、壁または自分のしっぽにぶつかると死にます。これを動かすスクリプトは2つあります。頭に付けるSnakeと、次の章でエサが登場するまで空のままのGameManagerです。
セルの幅は1単位で、中心は整数の位置にあります。xとzは-7から7までで、すべてのセルはy 0にあります。ヘビはセルの間を滑るようには移動しません。0.15秒などの一定間隔で刻まれるティックごとに、セル1つ分移動し、その間は静止します。
Unityでの拍はタイマーです。毎フレームTime.deltaTimeを加算し、タイマーが間隔に達したら処理を実行して、その間隔分を差し引きます。このビーコンは1秒ごとに点滅します。
public Light beacon;
public float interval = 1f;
private float timer;
void Update()
{
timer += Time.deltaTime;
if (timer >= interval)
{
timer -= interval;
beacon.enabled = !beacon.enabled;
}
}タイマーを0に戻すのではなく、間隔分を差し引くことで、間隔を超えたフレームの余りが保たれ、拍が遅れていくのを防げます。
チャレンジ
簡単頭はセル (-3, 0, 0) 上にある緑色の立方体です。Snake には tick(0.15 秒)と direction(Vector3.right)があります。
private float timer;を追加します。Update()で、Time.deltaTimeだけタイマーを増やします。tickに達したら、タイマーからtickを引き、Step()を呼び出します。Step()で、頭をdirectionに沿って 1 セル移動させます。
プレイを押して、頭が右へ進むのを確認しましょう。今のところ頭は盤面の外へ出ます。壁が登場するのはレッスン 4 です。その後、チェックを押します。
自分で試してみよう
using UnityEngine;
public class Snake : MonoBehaviour
{
public float tick = 0.15f; // 2回の移動の間隔(秒)
private Vector3 direction = Vector3.right;
void Update()
{
// tick秒ごとにStep()を1回実行する
}
void Step()
{
// 頭をdirectionに沿って1マス移動する
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。