91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

unity3D初識對象池技術

發布時間:2020-03-01 08:43:16 來源:網絡 閱讀:2914 作者:酷酷小喬 欄目:游戲開發

對象池概念:用來優化游戲,提升游戲性能,如飛機大戰 ,當觸及到大量的物體需要不斷的重新的被創建的時候,這個時候就適合用到對象池。


下面我會寫一個例子更詳細的來說明下這個對象池的用法:


  對象池主要有2個方法

     1:從池里去找東西

     2:往池里放東西


這里我是寫了一個打磚塊的例子,后續我會把整個游戲的代碼分享出來,里面包含一個拿和一個放的方法。



using UnityEngine;

using System.Collections;

using System.Collections.Generic; //用字典必須加上這個


public class ObjectPool : MonoBehaviour

{



    public static ObjectPool intance;  //單例模式

    public static Dictionary<string, ArrayList> pool = new Dictionary<string, ArrayList> { };  //字典保存我們要保存的對象


    void Start()

    {

        intance = this;

    }


    //從對象池里拿到我們的對象

    public Object Get(string prefabName, Vector3 position, Quaternion rotation)

    {


        string key = prefabName + "(Clone)";

        Object o;

        if (pool.ContainsKey(key) && pool[key].Count > 0) //判斷這個池里有沒有要拿的對象 

        {

            ArrayList list = pool[key];

            o = list[0] as Object;

            list.RemoveAt(0);

            //重新初始化相關狀態

            (o as GameObject).SetActive(true);

            (o as GameObject).transform.position = position;

            (o as GameObject).transform.rotation = rotation;


        }

        else

        {

            o = Instantiate(Resources.Load(prefabName), position, rotation); //如果池里沒有對象了就實例化一個出來 


        }


        // Object o = Instantiate(Resources.Load(prefabName), position, rotation);

        //初似化池里面的數據

        DelayDestroy dd = (o as GameObject).GetComponent<DelayDestroy>();

        dd.Init();

        return o;


    }


    //把對象放回對象池

    public Object Return(GameObject o)

    {

        string key = o.name;


        print("Return key" + key);


        if (pool.ContainsKey(key)) //判斷池里是否有我們要拿的對象

        {

            ArrayList list = pool[key];

            list.Add(o);


        }

        else

        {


            pool[key] = new ArrayList() { o };


        }

        o.SetActive(false); //讓對象隱藏

        return o;

    }

}



代碼2://銷毀對象的代碼

using UnityEngine;

using System.Collections;


public class DelayDestroy : MonoBehaviour {



    //需要初始化的所有屬性

    public void Init() 

    {

        StartCoroutine(ReturnToPool());

    

    }



    //協程函數

    IEnumerator  ReturnToPool()

    { 

       yield return  new WaitForSeconds (2f);

       ObjectPool.intance.Return(this.gameObject);

    

    }

}


這是游戲效果




unity3D初識對象池技術看到Ball(Clone)就是我們從對象池拿的對象,這樣我們就可以提高我們游戲的性能,實現了游戲優化

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿坝县| 安宁市| 宁国市| 慈利县| 平乐县| 图们市| 巴彦县| 台州市| 保德县| 四川省| 云龙县| 新余市| 大港区| 陇川县| 南川市| 萝北县| 沾益县| 进贤县| 广灵县| 涟源市| 洪泽县| 嘉峪关市| 鱼台县| 依安县| 巴南区| 岐山县| 营口市| 施甸县| 鄂伦春自治旗| 安阳市| 连平县| 西乡县| 汶川县| 湟源县| 武乡县| 章丘市| 商城县| 临澧县| 信丰县| 南澳县| 建宁县|