Menu
CoddyTech

Prefab'ler ve Instantiate

Coddy'nin Unity Journey'sinin Unity'de Script Yazmanın Temelleri bölümünün bir parçası. Ders 62 / 85.

Prefab, şablon olarak kaydedilmiş bir GameObject'tir: Hierarchy'den bir nesneyi Project penceresine sürüklediğinde Unity, nesneyi tüm bileşenleri ve Inspector değerleriyle birlikte kaydeder. Prefab'ın kendisi sahnede değildir. Bir betik, diğer tüm başvurular gibi bir alan aracılığıyla prefab'a erişir: public GameObject parcelPrefab; bildirimini yap ve prefab'ı Inspector'daki bu alana sürükle.

Instantiate(prefab, position, rotation) sahnede prefab'ın bir kopyasını oluşturur ve bu kopyayı döndürür. Bu teslimat dronu, Space tuşuna her basıldığında kendi konumuna bir paket bırakır. Quaternion.identity, döndürme olmadığı anlamına gelir:

public GameObject parcelPrefab;

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

Her basış, Hierarchy'ye Parcel(Clone) adlı bir nesne daha ekler. Prefab değişmeden kalır, bu nedenle her kopya aynı değerlerle başlar. Burada GetKeyDown önemlidir: GetKey kullanıldığında Space tuşunu yarım saniye basılı tutmak, her karede bir tane olmak üzere yaklaşık 30 paket bırakır.

challenge icon

Görev

Orta

Her tıklamada oyuncunun üstünde bir madeni para oluştur.

  1. public GameObject coinPrefab; alanını ekle. Sahne bu alanı Coin prefab'ıyla doldurur.
  2. Update() içinde, Input.GetMouseButtonDown(0) olduğunda Instantiate(coinPrefab, transform.position + new Vector3(0, 2, 0), Quaternion.identity); çağır.

“Oyna” düğmesine bas, hareket et ve tıkla: her seferinde oyuncunun üstünde bir madeni para belirir. Ardından “Kontrol et” düğmesine bas.

Kendin dene

using UnityEngine;

public class CoinDropper : MonoBehaviour
{
    public float speed = 4f;
    // coinPrefab: Coin prefab'ı ile doldurulmuş bir public GameObject alanı

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

        // Click: oyuncunun 2 birim üzerinde bir coin oluştur
    }
}

Unity'de Script Yazmanın Temelleri bölümündeki tüm dersler

Kendi başına pratik yap: Unity playground