【问题标题】:UI GameObject (Button prefab) randomly changing Z axis RectTransform when instantiated (UNITY)UI GameObject (Button prefab) 实例化时随机改变 Z 轴 RectTransform (UNITY)
【发布时间】:2021-03-18 10:47:36
【问题描述】:

我试图在画布的子对象中实例化一个预制按钮。它的 x 和 y 轴保持不变,但 Z 轴表现得很奇怪。由于某种原因,它变成了-800,我不知道为什么。代码如下:

当我按下播放键时,结果如下:

如您所见,即使我将 rectTransform 设置为其他值,它仍然变为 -800(我希望它为 0 或任何我想要的值。)。任何帮助,将不胜感激。非常感谢并保重。

【问题讨论】:

    标签: unity3d user-interface photon


    【解决方案1】:

    您在 RectTransform(和 Transform)中看到的位置是本地位置。当您实例化一个对象并将其作为另一个 Transform 的父对象时,本地位置将被更新以将对象保持在实例化位置。它通过修改本地位置来做到这一点。另一种看待它的方式,您实例化对象的世界位置,在您将其作为父对象后仍然相同。

    Instantiate 方法有一个接受 bool InsantaiteInWorldSpace 的重载,但看起来您想自己设置一些位置。在这种情况下,Transform 也有一个方法SetParent,它也有一个接受布尔值worldPositionStays 的重载。您可以访问 SetParent here 的 Unity 文档页面。

    在后一种情况下,您不会在实例化期间设置父对象,而是在之后设置 bool 以将对象保持在您手动设置的位置。这一切都取决于您希望如何根据您的层次结构定位您的项目。

    【讨论】:

    • 感谢您的回复!不幸的是,我已经尝试了 go.transform.SetParent() 并且发生的是按钮(这是我要实例化的 GO)在画布后面(在游戏场景中)和层次结构中的上方。我必须承认,我有点不明白你所说的一些概念,所以如果你不介意教育我,我将不胜感激。
    • @VirtualDreamer 嗯,如果它“高于”层次结构中的 Canvas,则父目标一定不正确。对象的子级将在层次结构中位于其下方,默认情况下位于列表的最后一个。你想检查所有GetChild(0) 的行是否真的正确?
    • 是的,我做到了。我使用 SSTools 来“吐司”检测到的父级的名称,它确实是正确的。 (图中画布的 RoomLayoutGroup 子级)
    • @VirtualDreamer 你的画布是设置为屏幕空间 - 覆盖还是屏幕空间相机?如果是 SS - Camera,那么 -800 将导致按钮位于相机后面。如果你看一下相机,你可以在场景视图中看到它。
    • 我很抱歉,你绝对是正确的。不知何故,相机被设置为SS-Camera。再次抱歉浪费了您的时间。也许我在尝试修复它时没有保存它。我再次道歉并非常感谢您的帮助。我最好避免这种误解。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 2021-12-03
    • 2021-10-15
    相关资源
    最近更新 更多