c# - C# Unity Script 有没有办法加快实例化
问题描述
我有 2 个相互交谈的脚本,基本上我的 spawn 脚本从一个简单的脚本中获取一个布尔值。布尔值在 if 语句结束时设置为 true 以显示灯亮。现在我有一个实例化 2 个预制件的碰撞器脚本。但这很慢。这个游戏应该很快,因为它正在向很多人演示,有没有办法加快速度。
private bool Once = true;
public Transform Spawnpoint1;
public Transform Spawnpoint2;
public GameObject Prefab1;
public GameObject Prefab2;
void OnTriggerEnter2D(Collider2D collision)
{
if (Once == true)
{
Debug.Log("It's true");
if (LightOnOff.torchLit == true)
{
Debug.Log(" It's Lit");
Instantiate(Prefab1, Spawnpoint1.position, Spawnpoint1.rotation);
Instantiate(Prefab2, Spawnpoint2.position, Spawnpoint2.rotation);
Once = false;
}
}
}
如果您想知道简单的脚本看起来像这样
public static bool torchLit;
public void lightOn()
{
this.GetComponent<Light>().enabled = true;
torchLit = true;
}
解决方案
您可以使用对象池。这是快速Instantiate
对象的常见做法。
这个怎么运作?
- 在场景加载时实例化对象。
- 将对象设置
acitve
为false
0、0、0position
。 - 当您需要 object 时,只需将其设置
active
为true
并设置position
为 desiredposition
。 - 当不再需要对象时,不要销毁,只需再次设置
acitve
为false
andposition
为 0, 0, 0。
我真的建议你看那个教程。也许对它进行更深入的研究,或者......只是免费Asset
使用Asset Store
.
推荐阅读
- r - R igraph:无法设置边缘序列的属性
- c++ - 有谁知道为什么我在 macOS 上构建 boost 但没有创建 boost::fiber 库?
- javascript - Stacked bars chart not rendering on mobile
- android - 如何每次使用 gradle 制作方面编织 kotlin 代码
- apache-kafka - Produce 调用配置了 IAsyncSerializer 值序列化器,但使用 Avro 序列化器时需要 ISerializer
- jquery - 用jquery替换html元素不起作用
- wpf - 禁用列表框的 Powershell WPF 样式模板
- r - For 循环在循环中失败 grobs [[i]] 中的错误:下标超出范围
- rust - 为什么将 tokio_postgres::Transaction 作为参考传递要求指示匿名生命周期?
- amazon-web-services - 使用 AWS 进入我的 CodePipeline 的“部署”阶段时出现持续错误