我在MotherSpawner
gameObject 上生成了一个预制件,我想在positionWhereObjectSpawn
gameObject 上再次生成该预制件。
我打算做的是使用positionWhereObjectSpawn
获得GameObject.Find
游戏对象的位置,然后在该位置上生成,但他们说这样效率不高。
有效的方法是什么?
答案 0 :(得分: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统一对象池并使用其中一个选项。
答案 1 :(得分:0)
如果这是静态的,并且您不会更改生成的数量,则可以设置公共字段并仅通过设置两个公共变换字段来存储要生成预制件的两个点的变换,或者如果要增加您可以简单地将这些位置存储在一个集合中并使用它们生成对象,然后再选择Gameobject。是的,由于效率低下,这种方法会在您的整个层次结构中进行搜索,因此请考虑花费多少时间浏览所有内容。>