【发布时间】:2020-12-23 00:36:00
【问题描述】:
我有一个游戏对象,它存在于我的场景中的世界空间中。我想获取此游戏对象的渲染器在屏幕空间中的边界矩形角的坐标,因为我有想要定位在此框周围的 UI 元素。
背景:我正在制作一个教程,我正在使用面板来使所有内容变暗,除了一个不会变暗的游戏对象。我可以使用已经存在于屏幕空间中并对其进行矩形变换的按钮轻松完成此操作,但我无法弄清楚如何围绕世界空间中的游戏对象执行此操作。我们正在使用带有正交投影的相机并且正在使用 Unity 版本 2019.2.17f1。
这是我尝试过的:
public void FocusOnRenderer(Renderer renderer) {
// left, top, right, and bottom are Panels whose pivots are set as follows:
// top: (1, 0)
// right: (0, 0)
// bottom: (0, 1)
// left: (1, 1)
// so when their positions are set to be the corners of the target bounding box, they will fit together nicely.
left.gameObject.SetActive(true);
top.gameObject.SetActive(true);
right.gameObject.SetActive(true);
bottom.gameObject.SetActive(true);
Vector3 center = HandleUtility.WorldToGUIPoint(renderer.bounds.center); // center of bounding box
Vector3 halfSize = HandleUtility.WorldToGUIPoint(renderer.bounds.extents)); // half size of bounding box
Vector3 topRight = center + halfSize;
Vector3 topLeft = center + new Vector3(-halfSize.x, halfSize.y, halfSize.z);
Vector3 bottomRight = center + new Vector3(halfSize.x, -halfSize.y, halfSize.z);
Vector3 bottomLeft = center + new Vector3(-halfSize.x, -halfSize.y, halfSize.z);
left.position = topLeft;
top.position = topRight;
right.position = bottomRight;
bottom.position = bottomLeft;
}
我认为这是错误的,因为我正在使用渲染器的边界来计算 halfSize 和 center 并没有给我一个边界矩形。我希望有一种简单的内置方法可以做到这一点,但到目前为止我还没有找到任何东西。
感谢您的帮助!
【问题讨论】:
-
您是否尝试过使用 Vector2 而不是 Vector3? WorldToGUIPoint() 返回一个 Vector2,所以在类型转换过程中可能会发生一些事情
-
@Kirlian 在这种情况下,所发生的只是
z组件将是0 -
@derHugo 这不是我们想要的,因为我们在谈论 UI 吗?无论如何,它们将是
0,因为halfSize来自Vector2 方法,并且它将自己的z 设置为0。 -
@Kirlian 好吧,是的...我只是提到了您的评论
something may be happening during the type conversion-> 不,在类型转换期间没有什么特别的事情发生,除了z将是0.. 它是要记住的事情不是真正“发生”的事情;) -
@derHugo 哦,对不起,我误会了