【问题标题】:Unity how can AddComponent<T>()?Unity怎么能AddComponent<T>()?
【发布时间】:2016-09-09 11:25:37
【问题描述】:

我需要将特定脚本附加到游戏对象。

public T ElegirScript<T>()
    {
        switch((int)tipoEdificio)  // enum
        {
        case 0:

            return Edificios;  // a class/script not instance
            break;
        case 1:

            return PlantaEnergia;  // a class/script not instance
            break;
        default:
            break;
        }
    }


gameobject.AddComponent<ElegirScript()>();

我怎样才能做到这一点?我有错误,谢谢。

我首先需要一个返回类型或组件的方法,返回必须是脚本。然后我 AddComponent 并给出程序选择的类型,我该怎么做?例子。

【问题讨论】:

标签: c# methods unity3d


【解决方案1】:

您不能将非组件类型的类与添加组件一起使用。这意味着您的类必须从 MonoBehaviour 继承才能添加到游戏对象中。其次,这不是您首先使用泛型的方式。如果您只是想根据条件添加不同的组件,为什么还要使用泛型,只需尝试:

if(condition)
gameObject.AddComponent<MyMonoBehaviourClass1>();
else
gameObject.AddComponent<MyMonoBehaviourClass2>();

我终于设法做到了 Op 想要的,但我认为它不是一个通用的解决方案。 对 OP 代码的更改:

public Type ElegirScript()
    {
        switch ((int)tipoEdificio)  // enum
        {
            case 0:
                return typeof(Edificios);  // a class/script not instance
            case 1:
                return typeof(PlantaEnergia);  // a class/script not instance
            default:
                return null;//Or throw exception here
        }
    }

现在您可以拨打gameObject.AddComponent(ElegirScript());,它工作正常。

【讨论】:

  • 不明白,我需要一个返回 TYPE 或 COMPONENT 的方法来做 addComponent()
  • 我觉得你很困惑。您不能将方法调用为 AddComponent 的类型。即使你的方法返回一个类型。
  • 好的,那么我必须始终将组件指定给程序??程序不能做出决定吗?
  • 是的,这可行,但我的问题是让它更快。我调用addComponent时的一种方法,但如果不可能,这解决了问题,谢谢。
  • @JoeBlow 我们是否可以开始聊天。我一直在考虑将方法的结果传递给 AddComponent 的方法,但似乎无法弄清楚。
猜你喜欢
  • 2020-06-07
  • 1970-01-01
  • 2017-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
  • 1970-01-01
相关资源
最近更新 更多