我想知道是否可以更改实例化的gameobject的预制件,而无需创建新的游戏对象。例如,
GameObject block = Instantiate (blockPrefab, pos, Quaternion.identity, transform);
我想将块的预制件改为另一个预制件(在另一条线上),是否可能?如果是这样,怎么样? 谢谢
您只需存储不同预制件的参考,然后更改Instantiate()
调用中使用的参考。
public GameObject[] prefabs = new GameObject[2]();
的东西Instantiate()
电话之前,请预先选择预制件和条件逻辑:
var prefabIndex = 0;
if(yourCondition = true) prefabIndex = 1;
//... = Instantiate(...)
Instantiate()
调用中,使用prefabs数组和预制索引作为开关:Instantiate(prefabs[prefabIndex])
编辑:根据您的评论......
(...)块的预制件也应该改变(...)
如果块的整体结构保持不变,并且只更改了一些属性(例如颜色或HP),那么查看ScriptableObject
s可能是个好主意。制作一个预制件,根据ScriptableObject
参考,简单地将不同的配置应用于spawn上的对象。
这个过程类似于我上面描述的过程,但是当你需要的只是几个属性的一些预设时,避免了在你的资产中有一个全新的GameObject
预制件的开销和一些陷阱。
我认为没有破坏游戏对象并创建一个新对象是不可能的。您可以实例化所有GameObjects然后使用SetActive方法,但它可能变得非常沉重。
看看这个脚本:ReplaceSelection也许它可以帮到你