框架的应用(一):对象池

来源:互联网 发布:足球彩票预测软件 编辑:程序博客网 时间:2024/05/17 02:57

应用场景:

战争游戏中的角色生成和销毁,因为战争游戏存在大量的生成角色和销毁角色,所以如何去节约性能很重要,对象池可以解决这个问题


看这一关于生成士兵的代码片段:

                    GameObject go = ObjPool.Instance.OnGetObj("Soldier1", "Prefabs/Soldier/");                    go.GetComponent<RoleSoldier>().setProperty(i,true);                    go.transform.position = warPos.SelfCropPos[i].SoldierPoses[j].position;                    go.transform.eulerAngles = new Vector3(0, 90, 0);                    selfRoles.Add(go.GetComponent<RoleBase>());

首先根据传路径参数进去对象池函数,然后对象池会根据情况返回一个我们需要的对象,再给这个对象重置一些基本属性,这就完成了对象池的出池操作了;


需要注意的是在出池之后如果对象是从池中取出来的(什么是从池中取出来的参考对象池的代码),而不是第一次生成,那么对象的Start函数不会被执行,这时候解决方法应该是OnEnable,参考这一代码片段:

    void OnEnable()    {        if(effect != null)            effect.SetActive(false);        StartCoroutine(DestroySelf());    }
使用场景是特效生成之后需要的销毁,取出池之后我们应该每次都执行这个协程销毁,所以应该在OnEnable实现;


销毁的代码片段:

    IEnumerator DestroySelf()    {        yield return new WaitForSeconds(0.1f);        if (effect != null)            effect.SetActive(true);        yield return new WaitForSeconds(time);        ObjPool.Instance.OnReturnObj(this.gameObject);    }
没什么特别的地方,进池只要把对象的gameObject传进去就完事了;

0 0
原创粉丝点击