Menu
CoddyTech

Prefaby i Instantiate

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

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

Instantiate(prefab, position, rotation) tworzy kopię prefabu w scenie i ją zwraca. Ten dron dostawczy upuszcza paczkę w swojej aktualnej 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 od tych samych wartości. W tym przypadku GetKeyDown ma 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

Spraw, aby każde kliknięcie powodowało pojawienie się monety nad graczem.

  1. Dodaj pole public GameObject coinPrefab;. Scena przypisze do niego prefabrykowaną monetę.
  2. W Update(), przy Input.GetMouseButtonDown(0), wywołaj Instantiate(coinPrefab, transform.position + new Vector3(0, 2, 0), Quaternion.identity);.

Naciśnij „Graj”, poruszaj się i klikaj: za każdym razem nad graczem pojawi się moneta. Następnie naciśnij „Sprawdź”.

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
    }
}

Wszystkie lekcje w sekcji Podstawy skryptów w Unity

Poćwicz samodzielnie: Edytor online Unity