【问题标题】:Unity3D. How to construct components programmatically统一3D。如何以编程方式构造组件
【发布时间】:2013-07-21 17:23:02
【问题描述】:

我是 Unity 新手,在理解架构方面有点困难。

假设我有一个名为“组件 A”的 C# 脚本组件。 我希望组件 A 具有 100 个其他类型为“组件 B”的组件的数组。 如何使用某些值以编程方式构造“组件 B”?

请注意,“组件 B”源自“MonoBehaviour”,因为它需要能够调用“StartCoroutine”

我知道,在统一中,您不会像在 OO 中那样使用构造函数。

【问题讨论】:

  • 您可以使用GameObject.AddComponent 动态添加组件。然后可以使用返回值来设置组件 B 的属性。

标签: unity3d constructor unity-components


【解决方案1】:

请注意,“组件 B”源自“MonoBehaviour”,因为它需要 能够调用'StartCoroutine'

我知道,在统一中,您不会像往常一样使用构造函数 会在OO中。

确实如此。一种可能是在运行时实例化组件并提供初始化它们的方法(如果初始化需要参数,否则所有初始化都可以在 StartAwake 方法中完成)。

如何以某种方式以编程方式构造“组件 B” 价值观?

这是一种可能的方法:

public class BComponent : MonoBehavior
{
  int id;
  public void Init(int i)
  {
    id = i;
  }
}
}
public class AComponent : MonoBehavior
{
  private BComponent[] bs;

  void Start()
  {
    bs = new BComponent[100];
    for (int i=0; i < 100; ++i )
    {
      bs[i] = gameObject.AddComponent<BComponent>().Init(i);
    }
   }
}

请注意,在上面的示例中,所有组件都将附加到同一个 GameObject,这可能不是您想要的。最终尝试提供更多细节。

【讨论】:

  • 其实在尝试之后,我认为你不能像那样调用'AddComponent'..我认为你必须说gameObject.AddComponent()
  • 有没有办法以与 RequireComponent 相同的方式添加组件,可以在运行时之外运行?
  • 是的,AddComponent 也可以从编辑器脚本中调用。
  • 但如果Init()返回void
猜你喜欢
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-10
相关资源
最近更新 更多