Menu
CoddyTech

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.

challenge icon

Wyzwanie

Średni

Zbuduj ścianę w GameManager:

  1. Dodaj public Brick brickPrefab i public Transform wall (w scenie połącz prefab Brick z obiektem Wall), a także public int rows = 5, public int columns = 9, public float spacingX = 1.75f, public float spacingY = 0.75f oraz public float topY = 6f.
  2. Napisz void BuildWall(): po jednym klocku dla każdego wiersza i każdej kolumny, które będą dziećmi obiektu wall. Wiersz 0 znajduje się na wysokości y = topY, a każdy kolejny wiersz jest niżej o spacingY. Odstęp między kolumnami wynosi spacingX, a ich układ jest wyśrodkowany względem x = 0. Klocki znajdują się na z = 0.
  3. Wywołaj BuildWall() z Start().

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.
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Gra w Unity: Zbijanie klocków