【问题标题】:Unity 5.6 - C# - Adding a GameObject to another GameObject with AddComponent<T>Unity 5.6 - C# - 使用 AddComponent<T> 将游戏对象添加到另一个游戏对象
【发布时间】:2017-04-28 20:35:49
【问题描述】:

我目前正在处理的函数实例化一个游戏对象(使用预制件)。我将此 GameObject 存储在局部变量中

GameObject tmpObject;

完美运行。接下来,我尝试将此 GameObject 分配给 Vive 控制器的 GameObject 表示,如下所示:

tmpObject = tmpController.gameObject.AddComponent<GameObject>() as GameObject;

我得到的错误是 UnityEngine.GameObject 无法转换为 UnityEngine.Component。

我在那里缺少一个简单的/基本的吗?我尝试按照 Unity 的official guidline 添加一个 SphereCollider,它确实有效,那么为什么我不能添加 GameObject?是否有将 GameObjects 添加到另一个 GameObject 的解决方法?任何帮助都非常感谢

【问题讨论】:

  • 一个GameObject 可以有属性/组件,但是一个GameObject 不能包含其他GameObjects。如果您想将parent 作为GameObject 分配给另一个人,那就另当别论了。
  • 但是假设我有一架飞机。然后,我可以通过将立方体拖到 Unity 层次结构中的平面中来将其添加到平面。那么立方体(GameObject)是平面(GameObject)的一个孩子。否则我明白你的意思,但我怎样才能将 tmpObject 指定为 tmpController 的子级?
  • 正确,但它不是父组件。

标签: c# unity3d htc-vive


【解决方案1】:

您不能将 GameObject 添加到 GameObject。这甚至没有意义。你只能附加组件。我认为你想让一个游戏对象成为另一个游戏对象的孩子......你可以使用SetParent 函数。有关如何创建 GameObject 以及您可以做什么的示例,请参见下文:

创建一个名为“BallObject”的新游戏对象

GameObject a = new GameObject("BallObject");

创建一个名为“BrickObject”的新游戏对象

GameObject b = new GameObject("BrickObject");

将“BrickObject”对象设为“BallObject”对象的父对象

a.transform.SetParent(b.transform);

使“BallObject”对象成为自己的对象。 “BrickObject”对象不再是父对象了

a.transform.parent = null;

将脚本/组件添加到您的“BrickObject”对象

b.AddComponent<Rigidbody>();

【讨论】:

  • 是的,你做到了。我相信 Op 想要创建新的 GameObject 并将其分配给 tmpObject 变量,但是当他在 GameObject 上使用 AddComponent 时失败了......新的关键字就是解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多