【问题标题】:Remove RectTransform from GameObject via Script通过脚本从 GameObject 中删除 RectTransform
【发布时间】:2021-05-17 02:06:35
【问题描述】:

我有一个带有 RectTransform 的 GameObject,我想通过脚本删除它。 换句话说,我想使用脚本在检查器中将 RectTransform 替换为常规 Transform。

在检查器中,您只需单击 RectTransform 下拉菜单,然后从那里选择 Remove Component,即可将 RectTransform 替换为 Transform。当然,这只有在没有直接依赖 RectTransform 的组件时才有效。

如果我使用如下脚本尝试这种方法:Destroy(GetComponent<RectTransform>()),我会收到一条错误消息:

不能销毁 RectTransform 组件 '我的游戏对象'。如果你想破坏游戏 对象,请改为在游戏对象上调用“Destroy”。破坏 不允许使用 RectTransform 组件。

当然,这是意料之中的,因为您无法从游戏对象中移除变换。然而,在我试图取回旧的 Transform 组件的情况下,这种行为是不受欢迎的

所以我的问题是:有没有办法通过脚本将当前的 RectTransform 替换为简单的 Transform 组件,这是如何完成的?

【问题讨论】:

  • 我不知道有什么办法可以创建一个新的游戏对象,然后通过脚本传递组件、值和引用。出于好奇,您为什么要尝试将游戏对象从 GUI 对象恢复为 3D 对象?我对它的使用方式很感兴趣:)
  • @AlexM。我正在制作一个可以与 SpriteRenderer 和 Image 一起用于 UI 和非 UI 目的的资产,我有一个带有在 Image 和 SpriteRenderer 之间切换的按钮的组件。基本上,当我切换到 Image 然后再切换回 SpriteRenderer 时,RectTransform 仍然存在。

标签: c# unity3d


【解决方案1】:

您不能删除转换。或者,创建一个空对象并将位于该对象上的整个层次结构移到那里。您可以简单地更改第一个孩子的父级并对齐本地位置,或者实现更复杂的系统,具体取决于您的需要。

【讨论】:

  • 我希望有一个更简单的解决方案。 “您不能删除转化”是什么意思?
  • 抱歉,英语不是我的母语,我没有正确翻译转换这个词。为什么不尝试存储对象的 2 个变体?对于 Image 和 SpriteRenderer,或者描述究竟应该发生什么,为什么需要在运行时更改图像SpriteRenderer?
  • 不一定在运行时,它是通过自定义检查器中的按钮完成的。我这样做是因为我觉得用户点击切换按钮比制作一个全新的游戏对象更方便。另外,我的脚本涉及很多设置,当然可以复制过来,但同样,只需单击一个按钮即可切换更方便。
猜你喜欢
  • 1970-01-01
  • 2017-04-06
  • 2015-01-11
  • 1970-01-01
  • 2017-10-11
  • 1970-01-01
  • 1970-01-01
  • 2015-09-23
  • 1970-01-01
相关资源
最近更新 更多