Mur
Lekcja 5 z 16 w kursie Gra w Unity: Zbijanie klocków w Coddy.
Cegły są rozmieszczone w siatce: wiersze liczone od góry do dołu, kolumny od lewej do prawej; każda cegła to kopia prefabrykatu cegły utworzona w dwóch zagnieżdżonych pętlach. Pozycja cegły wynika z numerów jej wiersza i kolumny pomnożonych przez odstęp między środkami cegieł, który jest równy rozmiarowi cegły plus niewielka przerwa.
Aby wyśrodkować siatkę na x = 0, ustal, gdzie znajdzie się pierwsza kolumna. Między n kolumnami jest n minus 1 przerw, więc przy odstępie s skrajne środki dzieli (n - 1) * s, a pierwszy znajduje się o połowę tej odległości w lewo. Pięć słupków ogrodzenia, w odstępie 2 jednostek:
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);
}Znajdują się one w pozycjach -4, -2, 0, 2 i 4: pierwszy słupek jest w pozycji -4, a nie -5, ponieważ pięć słupków rozdzielają cztery przerwy. Czwarty argument funkcji Instantiate, czyli nadrzędny Transform, umieszcza każdą kopię pod jednym obiektem, dzięki czemu Hierarchy pozostaje uporządkowane. Jeśli typem pola prefabrykatu jest skrypt, na przykład Brick, Instantiate zwraca skrypt nowej kopii, gotowy do użycia.
Wyzwanie
ŚredniZbuduj ścianę w GameManager:
- Dodaj
public Brick brickPrefabipublic Transform wall(w scenie połącz prefab Brick z obiektem Wall), a takżepublic int rows = 5,public int columns = 9,public float spacingX = 1.75f,public float spacingY = 0.75forazpublic float topY = 6f. - Napisz
void BuildWall(): po jednym klocku dla każdego wiersza i każdej kolumny, które będą dziećmi obiektuwall. Wiersz 0 znajduje się na wysokości y =topY, a każdy kolejny wiersz jest niżej ospacingY. Odstęp między kolumnami wynosispacingX, a ich układ jest wyśrodkowany względem x = 0. Klocki znajdują się na z = 0. - Wywołaj
BuildWall()zStart().
Naciśnij Play i odbij piłkę od ściany (klocki jeszcze się nie rozpadają), a następnie kliknij Check.
Spróbuj swoich sił
using UnityEngine;
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
void Awake()
{
Instance = this;
}
// Później: ściana z cegieł, wynik, życia i poziomy.
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.