Unity--简单的对象池

简单的对象池分三步走:

  • 建立对象池
  • 拿到对象
  • 回收对象

Test为对象池,Obj为自动回收的物体

Test.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour {
    //要复制的对象
    public GameObject mCube;
    //静态
    public static Test instance; 
    //存储复制体,利用栈先进后出的机制
    private Stack<GameObject> mStack = new Stack<GameObject>(); 
    //初始化
    private void Init(int count)
    {
        print("Init");
        for (int i = 0; i < count; i++)
        {
            GameObject obj = Instantiate(mCube);
            obj.gameObject.SetActive(false);
            mStack.Push(obj);
        }
        print("GameObject"+mStack.Count);
    }
    //拿物体
    public GameObject GetObj(Vector3 pos ,Quaternion rot)
    {
        print("get");
        if(mStack.Count < 2)
        {
            Init(10);
        }
        GameObject g = mStack.Pop();
        g.gameObject.SetActive(true);
        g.transform.position = pos;
        g.transform.rotation = rot;
        return g;
    }
    //回收物体
    public void Recycle(GameObject obj)
    {
        obj.gameObject.SetActive(false);
        mStack.Push(obj);
    }

    void Start() {
        instance = this;
        Init(15);
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            print("Space");
            Test.instance.GetObj(this.transform.position, Quaternion.identity);
        }
    }
}

Obj.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Obj : MonoBehaviour {
    private float mTime = 3f;

    void Update () {
        this.transform.position += Vector3.forward;
        
        if (mTime > 0)
        {
            mTime -= Time.deltaTime;
            if (mTime < 0)
            {
                Test.instance.Recycle(this.gameObject);
                mTime = 3f;
            }
        }
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、脚本1:对象池:用于存放相同类型的游戏对象 usingSystem.Collections; usingSys...
    Your_w阅读 1,258评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,779评论 18 399
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,217评论 30 472
  • 今天看了一位伙伴推荐的凤姐文章,觉得挺有收获的,基于演讲评估的角度,写一些自己的看法; 凤姐的这篇文章最大的闪光点...
    赵龙在学习阅读 153评论 0 0
  • 女主角:黎曦 男主角:韩炀
    浅墨书雪阅读 143评论 0 0