在另一个游戏对象上产生预制件的最佳方法

问题描述 投票:0回答:2

我在MotherSpawner gameObject上产生一个预制件,我想在positionWhereObjectSpawn gameObject上再次生成该预制件。

我打算做的是使用positionWhereObjectSpawn获得GameObject.Find游戏对象的位置,然后在该位置上产生,但他们说它效率低下。

有效的方法是什么?

c# unity3d
2个回答
1
投票

这样的事情应该有效:

var posGo = GameObject.Find("positionwhereobjectspawn");
Instantiate(myPrefab, posGo.transform.position, posGo.transform.rotation);

这里效率低下的一件事是GameObject.Find。如果你在每个产卵时都这样做,是的,效率很低。如果您找到它一次并将其简单地放入类中的变量中以便稍后使用,那么它就是高效的。像这样:

GameObject posGo;
Start() {
  posGo = GameObject.Find("positionwhereobjectspawn");
}

Update() {
  if(Input.GetKeyDown(KeyCode.SPACE)) {
    Instantiate(myPrefab, posGo.transform.position, posGo.transform.rotation);
  }
}

提高效率的下一步是摆脱Instantiate并使用对象池。您可以提前创建游戏对象,隐藏它们,并在需要时使用它们。为此,您应该使用Google unity对象池并使用其中一个选项。


0
投票

如果这是静态的并且您不会改变生成的数量,那么您可以创建公共字段并存储两个要生成预制件的点的转换,只需要生成2个公共转换字段或者如果要增加数量你可以简单地将这些位置存储在一个集合中并使用它来生成对象,然后Gameobject.Find效率低下,这个方法会搜索整个层次结构,所以想想看看所有内容需要多长时间。

© www.soinside.com 2019 - 2024. All rights reserved.