首页 > 解决方案 > 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;
}

标签: c#unity3d

解决方案


您可以使用对象池。这是快速Instantiate对象的常见做法。

这个怎么运作?

  1. 在场景加载时实例化对象。
  2. 将对象设置acitvefalse0、0、0 position
  3. 当您需要 object 时,只需将其设置activetrue并设置position为 desired position
  4. 当不再需要对象时,不要销毁,只需再次设置acitvefalseandposition为 0, 0, 0。

我真的建议你看那个教程。也许对它进行更深入的研究,或者......只是免费Asset使用Asset Store.


推荐阅读