日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity3D内存管理之资源池Object Pool(适合初学者)

發布時間:2023/12/20 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity3D内存管理之资源池Object Pool(适合初学者) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
引言:堅持更新,堅持更新,堅持更新。今日分享的是對象池的簡單應用,從而有效優化內存。這里主要根據坦克大戰的案例,講解資源池的基本用法。項目使用的源文件在文末提供。本人也只是一名即將畢業的大學生,講解如有不足的地方,各位客官還請提點! 開發版本:Unity 5.3.5f1 適合人群:適合初學者


一、什么是資源池

將一定數量的對象預先存儲在資源池中,當需要的時候使用,而不是每次都實例化一個對象,不用的時候再放回。例如一款射擊類游戲,需要不斷的發射子彈,如果每發射一顆子彈,都要實例化一個對象,隨后再銷毀對象,再實例化對象,必然會消耗較大的內存。如果預先就將子彈實例化出一定的數量,并保存在彈夾中,發射的時候,取出來發射,不用的時候,再放回彈夾。如此反復利用,可以避免頻繁實例化和銷毀帶來的性能消耗。這里的彈夾的概念就是資源池模式!

二、實現思路

以之前小生的坦克大戰為例(傳送門:https://blog.csdn.net/qq_35361471/article/details/79321304),來實現子彈的資源池功能。在游戲開始時,預先實例化30枚子彈在場景中,并且隱藏起來。當坦克發射子彈的時候,顯示子彈。當子彈碰撞到物體爆炸時,將其隱藏起來。假設30枚子彈在同一時刻都在場景中使用(該游戲規模較小,30枚子彈足夠了,但存在子彈不夠的情況),則實例化新的子彈,提供使用。可以使用列表來存儲實例化的子彈。使用流程圖如下所示:


三、代碼實現

using UnityEngine; using System.Collections; using System.Collections.Generic;public class BulletPool : MonoBehaviour {public int count = 30;//預定義子彈的數量public GameObject bulletPrefab;private List<GameObject> bulletList = new List<GameObject>();//列表存儲實例化的子彈private void Awake(){InitPool();}//初始化資源池private void InitPool(){for (int i = 0; i < count; i++){CreatBullet();}}//實例化一個子彈,加入到列表中,并隱藏private GameObject CreatBullet(){GameObject go = Instantiate(bulletPrefab) as GameObject;bulletList.Add(go);go.transform.SetParent(transform);go.SetActive(false);return go;}//返回子彈列表中還沒有使用的子彈對象,如果沒有的話,則實例化新的子彈public GameObject GetBullet(){foreach (GameObject bullet in bulletList){if (bullet.activeInHierarchy == false){bullet.SetActive(true);return bullet;}}return CreatBullet();}//回收子彈到資源池中//回收成功返回true,失敗返回falsepublic bool PutBack(GameObject go){if (bulletList.Contains(go)){go.SetActive(false);return true;}return false;} }

源項目文件鏈接:鏈接:https://pan.baidu.com/s/1f1-nQtS3B30Q0-NVOr_TMg 密碼:5ptj

共同努力學習Unity!!!

總結

以上是生活随笔為你收集整理的Unity3D内存管理之资源池Object Pool(适合初学者)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。