Menu
CoddyTech

Prefabrykaty i Instantiate

Część sekcji Podstawy skryptów w Unity ścieżki Unity w Coddy. Lekcja 48 z 67.

Prefab to obiekt GameObject zapisany jako szablon: przeciągnij obiekt z okna Hierarchy do okna Project, a Unity zapisze go wraz ze wszystkimi komponentami i wartościami z Inspektora. Sam prefab nie znajduje się w scenie. Skrypt otrzymuje go przez pole, tak jak każdą inną referencję: zadeklaruj public GameObject parcelPrefab; i przeciągnij prefab na to pole w Inspektorze.

Instantiate(prefab, position, rotation) tworzy kopię prefabu w scenie i ją zwraca. Ten dron dostawczy upuszcza paczkę w swojej pozycji za każdym razem, gdy naciśniesz spację. Quaternion.identity oznacza brak obrotu:

public GameObject parcelPrefab;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        Instantiate(parcelPrefab, transform.position, Quaternion.identity);
    }
}

Każde naciśnięcie dodaje kolejny obiekt do Hierarchy o nazwie Parcel(Clone). Prefab pozostaje bez zmian, więc każda kopia zaczyna z tymi samymi wartościami. GetKeyDown ma tu znaczenie: przy użyciu GetKey przytrzymanie spacji przez pół sekundy spowodowałoby upuszczenie około 30 paczek, po jednej na klatkę.

challenge icon

Wyzwanie

Średni

Strzałki już poruszają graczem. Spraw, by każde kliknięcie tworzyło monetę nad nim:

  • Dodaj publiczne pole typu GameObject o nazwie coinPrefab. Scena przypisze do niego prefabrykowaną monetę Coin, gdy tylko pole będzie dostępne.
  • Po kliknięciu lewego przycisku myszy utwórz jedną kopię monety 2 jednostki nad graczem, bez obrotu.

Naciśnij Play, poruszaj się i kliknij kilka razy, a następnie naciśnij Check.

Spróbuj swoich sił

using UnityEngine;

public class CoinDropper : MonoBehaviour
{
    public float speed = 4f;
    // coinPrefab: publiczne pole GameObject, do którego przypisano prefab Coin

    void Update()
    {
        if (Input.GetKey(KeyCode.RightArrow))
        {
            transform.position += new Vector3(speed * Time.deltaTime, 0, 0);
        }
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            transform.position -= new Vector3(speed * Time.deltaTime, 0, 0);
        }

        // Kliknięcie: utwórz monetę 2 jednostki nad graczem
    }
}
quiz iconSprawdź się

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

Wszystkie lekcje w sekcji Podstawy skryptów w Unity