惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Last Week in AI
Last Week in AI
S
Schneier on Security
The GitHub Blog
The GitHub Blog
宝玉的分享
宝玉的分享
GbyAI
GbyAI
L
LINUX DO - 热门话题
大猫的无限游戏
大猫的无限游戏
Hacker News: Ask HN
Hacker News: Ask HN
A
Arctic Wolf
罗磊的独立博客
S
Securelist
I
Intezer
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
D
Darknet – Hacking Tools, Hacker News & Cyber Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Register - Security
The Register - Security
M
MIT News - Artificial intelligence
C
Cisco Blogs
G
GRAHAM CLULEY
P
Proofpoint News Feed
美团技术团队
MongoDB | Blog
MongoDB | Blog
Cyberwarzone
Cyberwarzone
T
Tor Project blog
P
Proofpoint News Feed
NISL@THU
NISL@THU
J
Java Code Geeks
有赞技术团队
有赞技术团队
AWS News Blog
AWS News Blog
D
Docker
博客园 - 聂微东
I
InfoQ
AI
AI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
O
OpenAI News
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
Cybersecurity and Infrastructure Security Agency CISA
Know Your Adversary
Know Your Adversary
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Application and Cybersecurity Blog
Application and Cybersecurity Blog
N
News | PayPal Newsroom
L
LangChain Blog
Hugging Face - Blog
Hugging Face - Blog
T
Tenable Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
MyScale Blog
MyScale Blog
T
Tailwind CSS Blog
K
Kaspersky official blog

博客园 - 阿土仔

Unity UGUI动态生成控件 Unity场景间数据传递方法 UGUI防止穿透和判断点击的是否是UI Unity中的Character Controller Unity插件研究-EasyTouch V5 Unity塔防游戏的创建 Unity性能优化-DrawCall Unity性能优化-对象池 Unity性能优化-音频设置 Unity性能优化-遮挡剔除 Unity异步加载场景 Unity 协程 HBuilder git使用-分工合作 HBuilder git合作-代码同步 微信小程序开发-窗体设置 HBuilder git合作-从Git Hub Clone项目 HBuilder git合作-上传项目到Git Hub 微信小程序开发-tabbar组件 HBuilder git使用-建立仓库,邀请用户
Unity 2019中对象池的用法
阿土仔 · 2023-05-05 · via 博客园 - 阿土仔

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

public class ExamplePool : MonoBehaviour
{
private ObjectPool<GameObject> objectPool;

public GameObject objectType;

public int poolSize = 10;

void Start()
{
objectPool = new ObjectPool<GameObject>(() =>
{
GameObject obj = Instantiate(objectType);
obj.SetActive(false);
return obj;
}, poolSize);
}

void Update()
{
GameObject obj = objectPool.Get();
obj.SetActive(true);
obj.transform.position = new Vector3(Random.Range(-5f, 5f), 1f, Random.Range(-5f, 5f));

StartCoroutine(ReleaseObjectAfterDuration(obj, 1f));
}

private IEnumerator ReleaseObjectAfterDuration(GameObject obj, float delay)
{
yield return new WaitForSeconds(delay);
objectPool.Release(obj);
}
}

在此示例中,我们创建了一个可以管理GameObject对象池的ObjectPool<GameObject>实例。我们使用了Unity 2019提供的新泛型对象池API:new ObjectPool<T>(Func<T> factoryMethod, int initialCapacity)。在函数中,我们传递了一个工厂方法,用于在添加至池中前实例化一个新对象。

Start()方法中,我们实例化了一个GameObject类型对象池,初始化完成后,我们可以随时使用Get()Release()方法。当需要一个实例时,我们可以使用Get()方法返回一个可用的对象实例并将其设置为已激活状态。当我们使用完对象时,需要将其释放到对象池中,这时我们使用Release()方法来将其放回对象池。

值得一提的是,在Unity中自带的泛型对象池API中,我们并不需要实现对象的创建或销毁等处理。对象池自动处理创建和销毁的逻辑,并通过工厂方法减少复杂的编码需求。