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

时间:2019-03-06 14:49:30

标签: c# unity3d gameobject

我想知道是否可以在不创建新游戏对象的情况下更改实例化游戏对象的预制件。 例如
allowSyntheticDefaultImports

我想将模块的预制件更改为另一个预制件(在不同的行中), 可能吗?如果可以,怎么办?
谢谢

2 个答案:

答案 0 :(得分:0)

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

  1. (显然)在编辑器中创建两个预制件。
  2. 在脚本中,输入类似public GameObject[] prefabs = new GameObject[2]();
  3. 在进行Instantiate()呼叫之前,请进行预制选择和条件逻辑:

    var prefabIndex = 0;
    if(yourCondition = true) prefabIndex = 1;
    //... = Instantiate(...)
    
  4. 在您的Instantiate()呼叫中,将prefabs数组和prefab索引用作开关:Instantiate(prefabs[prefabIndex])


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

  

(...)块的预制件也应更改(...)

如果块的总体结构保持不变,并且仅更改了一些属性(例如颜色或HP,例如),则最好查看ScriptableObject。制作 一个 预制件,使其根据ScriptableObject参考将不同的配置简单地应用于生成对象。

该过程类似于我上面描述的过程,但是当您所需的只是一些属性的一些预设时,避免了与在资产中拥有全新的GameObject预制件有关的开销和一些陷阱。

答案 1 :(得分:-1)

我认为不破坏游戏对象并创建新对象是不可能的。 您可以实例化所有GameObject,然后使用SetActive方法,但是它会变得很繁琐。

看看这个脚本:ReplaceSelection也许可以帮助您