统一将预制件设置为另一个游戏对象的子对象

Posted

技术标签:

【中文标题】统一将预制件设置为另一个游戏对象的子对象【英文标题】:Setting a prefab as child of another game object in unity 【发布时间】:2021-10-24 12:04:22 【问题描述】:
 public GameObject aiArrow;
 aiArrow.transform.parent = this.gameObject.transform;

当我尝试将预制件设置为另一个对象的子对象时,会发生以下错误。

设置驻留在预制资产中的转换的父级是 禁用以防止数据损坏

如何将此“aiArrow”预制件设置为另一个游戏对象的子对象。

【问题讨论】:

您的预制游戏对象何时实例化? 你可能想在你的场景中设置一个 instantiated 对象的父对象......而不是预制的 asset ;) 【参考方案1】:

您可以直接在 Instantiate() 函数调用中执行此操作。

public Transform parentObject;
public GameObject prefab;

public void CreateObject()

   Instantiate(prefab, parentObject);

Instantiate 方法有几个重载,您可以在其中指定父对象。这是最简单的例子。重要的!上面的示例不会修改位置或旋转。它的作用就像您将游戏对象拖放到另一个游戏对象下方的Hierarchy 中一样。请参阅 Instatiate 了解您需要的过载。

【讨论】:

我想知道是否有办法在父级下实例化,但将其插入一些现有的子预制件之间(不仅仅是在最后)。目的是在刷新/重新加载期间通过 SetActive(bool) 重用一些子预制件,而不是销毁它们并重新实例化所有内容。 哦,找到了这个...***.com/questions/36106736/… 还有这个...***.com/questions/52651495/…

以上是关于统一将预制件设置为另一个游戏对象的子对象的主要内容,如果未能解决你的问题,请参考以下文章

Unity - 动画将游戏对象从其产生的位置移开?

在 Unity C# 中实例化游戏对象列表

使 UIButtons 成为另一个对象的子对象

Unity,改变子对象的旋转。无法访问子对象

如何从预制件中获取场景中游戏对象的引用

如何使用 Unity ARKit 激活场景中的对象而不是预制件