对象池

一、对象池物体

using UnityEngine;
public class PooledObject:MonoBehaviour{
    pulbic ObjectPool Pool{get;set;}
    public void ReturnToPool(){
        if(Pool){
            Pool.AddObject(this);
        }else{
            Destory(gameObject);
        }
    }
}

如果不存在对象池,就销毁

要使用对象池管理时,就让物体继承PooledObject


二、对象池

public class ObjectPool:MonoBehaviour{
    PooledObject prefab;
    List<PooledObject> availableObjects = new List<PooledObject>();
    
    public PooledObject GetObject(){
        PooledObject obj;
        int lastAvailableIndex = availableObjects.Count-1;
        if(lastAvailableIndex >= 0){
            obj = availableObjects[lastAvailableIndex];
            availableObjects.RemoveAt(lastAvailableIndex);
            obj.gameObject.SetActive(true);
        }else{
            obj = Instantiate<PooledObject>(prefab);
            obj.transform.SetParent(transform,false);
            obj.Pool = this;
        }
        
        return obj;
    }
    
    public void AddObject(PooledObject obj){
        obj.gameObject.SetActive(false);
        availableObjects.Add(obj);
    }
}

首页 我的博客
粤ICP备17103704号