在脚本中更改实例化的gameobject的预制件

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

我想知道是否可以更改实例化的gameobject的预制件,而无需创建新的游戏对象。例如, GameObject block = Instantiate (blockPrefab, pos, Quaternion.identity, transform);

我想将块的预制件改为另一个预制件(在另一条线上),是否可能?如果是这样,怎么样? 谢谢

c# unity3d gameobject
2个回答
0
投票

您只需存储不同预制件的参考,然后更改Instantiate()调用中使用的参考。

  1. 在编辑器中创建两个预制件(显然)。
  2. 在脚本中,有类似public GameObject[] prefabs = new GameObject[2]();的东西
  3. 在你的Instantiate()电话之前,请预先选择预制件和条件逻辑: var prefabIndex = 0; if(yourCondition = true) prefabIndex = 1; //... = Instantiate(...)
  4. 在你的Instantiate()调用中,使用prefabs数组和预制索引作为开关:Instantiate(prefabs[prefabIndex])

编辑:根据您的评论......

(...)块的预制件也应该改变(...)

如果块的整体结构保持不变,并且只更改了一些属性(例如颜色或HP),那么查看ScriptableObjects可能是个好主意。制作一个预制件,根据ScriptableObject参考,简单地将不同的配置应用于spawn上的对象。

这个过程类似于我上面描述的过程,但是当你需要的只是几个属性的一些预设时,避免了在你的资产中有一个全新的GameObject预制件的开销和一些陷阱。


-1
投票

我认为没有破坏游戏对象并创建一个新对象是不可能的。您可以实例化所有GameObjects然后使用SetActive方法,但它可能变得非常沉重。

看看这个脚本:ReplaceSelection也许它可以帮到你

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