【发布时间】:2019-10-18 11:17:53
【问题描述】:
我正在尝试使用按钮 UI 元素统一创建一个滚动库存系统。我为一个不是预制的按钮制作了一个模板,并使用该模板实例化了一个游戏对象,这应该是模板的克隆。相反,它就像一个预制件并给了我一个错误。
我碰巧找到了一个运行良好的tutorial。我按照本教程一直到必须设置实例化游戏对象的父级。导师做到了这一点,没有任何麻烦。我没有尝试联系制作本教程的人,因为此时它已经超过 2 年了,并且该频道至少有 7 个月没有活跃。我尝试更改他的代码并删除按钮预制件。我在此站点上找到了 similar problem,但该解决方案对我不起作用。
[SerializeField]
private GameObject itemTemplate, inventoryTabWeapons;
private GameObject item;
public void GenerateItem(string name)
{
item = Instantiate(itemTemplate) as GameObject;
item.SetActive(true);
item.transform.SetParent(inventoryTabWeapons.transform, false); //This line is where the error brings me to.
}
我想在这里发布结果的截图,但我显然没有足够的声望点。
预期结果: 该按钮应成为 ListContent 的子项,ListContent 在检查器中设置为inventoryTabWeapons。
实际结果: 该按钮不是任何东西的子元素。
我收到以下错误:
禁用设置驻留在预制资产中的转换的父级以防止数据损坏
这段代码没有使用任何预制件,唯一改变其父级的资产是模板的克隆,所以这个错误对我来说没有意义。
【问题讨论】:
-
实例化功能仅适用于预制件。你不能实例化不是预制的东西。
-
@SeanCarey 使用 [SerializeField] 时,您可以通过检查器拖放任何游戏对象并使用该游戏对象进行实例化。当按钮是预制件并且我通过检查器拖放预制件时,同样的错误也适用。
-
不,你错了。你不能实例化不是预制的东西。这就是您的代码不起作用的原因。
-
@SeanCarey 当我看到您的第一条评论时,我尝试将按钮变成预制件并将检查器中的预制件拖到正确的组件上。绝对没有任何改变。在同一个项目中有几个实例,我确实使用了这种方法,而没有将游戏对象变成预制件,并且它起作用了。按照你刚才的评论,我又试了一次,它没有失败。恐怕这不能解决我的问题。