unity游戏性能优化之cpu优化第二节--对象池技术的介绍

这节介绍一下unity中对象池的使用

    public GameObject EnemyPrefab;
    public static Vector3 defaultposition = new Vector3 (33,-6,8);
    public GameObject[] instances;

    void Start()
    {
        instances = new GameObject[maximnmInstanceCount];     //僵尸类数组作为对象池
        for(int i = 0;i < maximnmInstanceCount;i++)
        {
            //使用instantiate函数实例化怪物,禁用对象并放入对象池
            GameObject enemy = Instantiate (EnemyPrefab,defaultposition,Quaternion.identity) as GameObject;
            EnemyPrefab.SetActive (false);
            instances [i] = enemy;
        }
    }
//在怪物对象池中找到一个未激活enemy,找不到则返回null
    private GameObject GetNextEnemy()
    {
        for (var i = 0; i < maximnmInstanceCount; i++) 
        {
            if (!instances [i].activeSelf)
            {
                return instances [i];
            }
            return null;
        }
    }
    //获取没有激活的enemy对象
    private bool  Generate(Vector3 position)
    {
        GameObject enemy = GetNextEnemy ();
        if (enemy != null)
        {
            //激活怪物
            enemy.SetActive (true);
            //这里自定义函数

            return true;
        }
        return false;
    }

在日常开发中 我们激活实例化对象后 可以进行自己想要的操作
比如:初始化位置,伤害等等我们需要启用的功能

这里需要注意的一点,当怪物死亡后,我们需要有一个死亡状态处理函数。相当于把死亡的怪物放回池子里供下次使用。

对象池也有它的缺点,段时间内实例化太多的对象也会造成游戏的卡顿 ,这里我们使用协程函数以一定的时间间隔创建多个游戏对象

    private int instanceCnt = 0;

    void StartSpawnInstance()
    {
        instanceCnt = 10;
        //启动协程
        StartCoroutine(SpawnInstance());
    }

    //定义协程
    IEnumerator SpawnInstance()
    {
        while(instanceCnt > 0)
        {
            //这里进行实例化游戏对象函数


            instanceCnt--;
            yield return new WaitForSeconds (waitTime);
        }
    }

下一节是渲染系统的简单优化

只是一个简单的演示 游戏cpu优化有很多的难点和有趣的地方 欢迎前辈们指导
感谢(づ ̄ 3 ̄)づ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值