Implementowanie łączenia obiektów w Unity

Łączenie obiektów to wzorzec projektowy używany przy tworzeniu gier w celu wydajnego zarządzania obiektami gier i ich ponownego wykorzystania. W Unity częste tworzenie instancji i niszczenie obiektów może prowadzić do problemów z wydajnością ze względu na alokację pamięci i wyrzucanie elementów bezużytecznych. Łączenie obiektów rozwiązuje ten problem poprzez wstępne utworzenie predefiniowanej liczby obiektów na początku gry, a następnie ponowne ich wykorzystanie w razie potrzeby, zamiast tworzyć i niszczyć je w locie.

Ten samouczek poprowadzi Cię przez implementację łączenia obiektów w Unity przy użyciu języka C#. Stworzymy prosty przykład z pociskami, które są łączone i ponownie wykorzystywane.

Krok 1: Konfiguracja projektu

  1. Utwórz nowy projekt Unity lub otwórz istniejący.
  2. Utwórz pusty obiekt GameObject w swojej scenie, aby pełnił funkcję menedżera puli obiektów.

Krok 2: Napisanie skryptu łączenia obiektów

using System.Collections.Generic;
using UnityEngine;

public class ObjectPooler : MonoBehaviour
{
    public static ObjectPooler Instance;

    public GameObject pooledObject;
    public int pooledAmount = 20;
    List pooledObjects;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        pooledObjects = new List();
        for (int i = 0; i < pooledAmount; i++)
        {
            GameObject obj = Instantiate(pooledObject);
            obj.SetActive(false);
            pooledObjects.Add(obj);
        }
    }

    public GameObject GetPooledObject()
    {
        for (int i = 0; i < pooledObjects.Count; i++)
        {
            if (!pooledObjects[i].activeInHierarchy)
            {
                return pooledObjects[i];
            }
        }

        return null;
    }
}

Krok 3: Tworzenie obiektu do puli

Utwórz prefabrykat dla obiektu, który chcesz połączyć. W tym przykładzie utwórzmy prosty pocisk.

  1. Utwórz nowy obiekt GameObject i nadaj mu nazwę "Projectile".
  2. Dołącz komponent Rigidbody, aby umożliwić interakcje fizyczne.
  3. Opcjonalnie dołącz komponent Collider, aby wykryć kolizje.
  4. Przeciągnij obiekt GameObject do folderu Zasoby, aby utworzyć prefabrykat.

Krok 4: Korzystanie z puli obiektów

using UnityEngine;

public class ProjectileSpawner : MonoBehaviour
{
    public float fireRate = 0.5f;
    float nextFire = 0.0f;

    void Update()
    {
        if (Input.GetButtonDown("Fire1") && Time.time > nextFire)
        {
            nextFire = Time.time + fireRate;
            SpawnProjectile();
        }
    }

    void SpawnProjectile()
    {
        GameObject projectile = ObjectPooler.Instance.GetPooledObject();

        if (projectile != null)
        {
            projectile.transform.position = transform.position;
            projectile.transform.rotation = transform.rotation;
            projectile.SetActive(true);
        }
    }
}

Krok 5: Testuj

  1. Dołącz skrypt 'ProjectileSpawner' do dowolnego obiektu GameObject w swojej scenie.
  2. Przypisz prefabrykat pocisku do pola 'pooledObject' w komponencie 'ObjectPooler' menedżera GameObject.
  3. Uruchom grę i naciśnij przycisk strzału (zakładając, że "Fire1"), aby wystrzelić pociski.

Wniosek

Łączenie obiektów jest podstawową techniką optymalizacji podczas tworzenia gier, szczególnie w Unity. Wykorzystując ponownie obiekty, zamiast wielokrotnie je tworzyć i niszczyć, możesz poprawić wydajność i efektywność swojej gry. W tym samouczku nauczyłeś się implementować łączenie obiektów w Unity na prostym przykładzie z użyciem języka C#.

Sugerowane artykuły
Tworzenie obiektów interaktywnych w Unity
Implementowanie interakcji kinetycznych w Unity
Skrypt do chwytania obiektów w Unity
Tworzenie klas i obiektów w kodzie Unity
Otwieranie szuflad i szafek za pomocą określonych kluczy w Unity
System pick and drop bez zapasów w Unity
Korzystanie z kontrolera Runtime Animator w Unity