壁
Coddyの「Unityゲーム:ブロック崩し」コースのレッスン 5/16。
レンガはグリッド状に並びます。上から下へ行を、左から右へ列を配置し、それぞれは2つの入れ子になったループで作られたレンガのプレハブのコピーです。レンガの位置は、行番号と列番号に、レンガの中心間の間隔(レンガのサイズに小さな隙間を加えたもの)を掛けて求めます。
グリッドを x = 0 を中心に配置するには、最初の列の位置を計算します。n 列の間には n - 1 個の隙間があるため、間隔が s のとき、両端の中心間の距離は (n - 1) * s となり、最初の列はその半分だけ左に配置されます。間隔が2単位の柵の支柱が5本ある場合:
int posts = 5;
float spacing = 2f;
float left = -(posts - 1) * spacing / 2f;
for (int i = 0; i < posts; i++)
{
Instantiate(postPrefab, new Vector3(left + i * spacing, 0f, 3f), Quaternion.identity);
}支柱は -4、-2、0、2、4 の位置に立ちます。最初の支柱が -5 ではなく -4 にあるのは、5本の支柱の間に4つの隙間があるためです。Instantiate の第4引数である親 Transform を指定すると、各コピーが1つのオブジェクトの下に配置され、Hierarchy を整理された状態に保てます。プレハブフィールドの型が Brick のようなスクリプトの場合、Instantiate は新しいコピーのスクリプトを返すため、そのまま使用できます。
チャレンジ
中級GameManagerで壁を作成します。
public Brick brickPrefabとpublic Transform wall(シーンでBrickプレハブとWallオブジェクトをリンクします)、およびpublic int rows = 5、public int columns = 9、public float spacingX = 1.75f、public float spacingY = 0.75f、public float topY = 6fを追加します。void BuildWall()を記述します。各行と列にレンガを配置し、wallの子にします。行0はy =topYに配置し、各行はその下にspacingYずつ下げます。列の間隔はspacingXとし、x = 0を中心に配置します。レンガはz = 0に配置します。Start()からBuildWall()を呼び出します。
Playを押して、ボールを壁に跳ね返らせます(レンガはまだ壊れません)。その後、Checkを押します。
自分で試してみよう
using UnityEngine;
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
void Awake()
{
Instance = this;
}
// 後で:ブロックの壁、スコア、残機、レベル。
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。