(Unity) 如何使用泛型类型的 AddComponent

Posted

技术标签:

【中文标题】(Unity) 如何使用泛型类型的 AddComponent【英文标题】:(Unity) How to use AddComponent with a Generic Type 【发布时间】:2017-09-04 05:41:09 【问题描述】:

我正在尝试从列表中添加组件。

这是一个非常相似的情况,只是他没有从列表中获取它们。 Unity how can AddComponent<T>()?

到目前为止,这是我的代码,但我真的不知道从哪里开始。顺便说一句,它是 C#,我只是没有看到它的选项,所以我很抱歉。

它有点工作,它确实添加了一个没有错误的组件,但它添加的组件是空白的。

编辑:我忘记添加 AddComponentToObject。现在是完整的代码。

public class LittleComponent : MonoBehaviour 

    public List<UnityEngine.Object> specialScripts = new List<UnityEngine.Object>();

    public Type GenericSpecialtyScript(int script)
    
        return specialScripts[script].GetType();
    


    public void AddComponentToObject(GameObject addToObject)
    

        GenericSpecialtyScript(0);
        addToObject.AddComponent<GenericSpecialtyScript>();

    


public class GenericSpecialtyScript : MonoBehaviour



这就是我测试它的方式。它只是一个编辑器脚本。

public void TestButton()

    if (GUILayout.Button("Test", GUILayout.Height(30)))
    
        _LittleComponent.AddComponentToObject(_LittleComponent.gameObject);
    

【问题讨论】:

这已经有几年的历史了,但是 Unity 论坛上有人找到了一种方法并将其放在了 github 上。 github.com/Baste-RainGames/RuntimeScriptField_Unity 【参考方案1】:

如果您只想将列表中的一堆组件添加到 GameObject,那么您可以使用 Type 的列表。

public class MultiComponentAdder : MonoBehaviour 
  List<Type> types = new List<Type>();

  void Awake () 
    types.Add(typeof(Apple));
    types.Add(typeof(Orange));
    types.Add(typeof(Banana));

    foreach (var t in types)
    
        this.gameObject.AddComponent(t);
    
  

【讨论】:

如果我以前不知道类型怎么办?我正在创建一个编辑器工具,我不希望人们必须进行任何编码。

以上是关于(Unity) 如何使用泛型类型的 AddComponent的主要内容,如果未能解决你的问题,请参考以下文章

蓝鸥Unity开发基础二——课时21 泛型

unity的C#学习——泛型的创建与继承泛型集合类泛型中的约束和反射

具有逆变类型参数和 Unity 容器的泛型

c# 泛型类型和存储库模式

百度API根据经纬度取地址问题

在 Unity 中使用泛型... InvalidCastException