统一的RectTransformUtility.ScreenPointToLocalPointInRectangle是做什么的?我读过统一文档,但我没有得到明确的含义。
发布于 2018-04-09 20:21:45
这个问题从一个小的几何学问题开始。你有两个不同的平面,它们可能平行,也可能不平行。
1)屏幕空间。这是您的计算机正在显示的实际屏幕坐标,当您移动鼠标时,它是箭头图标移动的位置。这可以被认为是一个平面跨越你的屏幕表面。
2)你的场景中有一个长方形。由于Unity3D (这里的3d部分很重要)如何设置场景,您有存在于具有深度的环境中的对象。在2D场景中,这架飞机很可能与你的屏幕平行,然而在3D场景中,这架飞机可能会与你的屏幕相交,而不是沿着屏幕的一侧运行。
这个函数将在屏幕上使用一个坐标(一个常见的例子是鼠标位置)并翻译它,这样它就不会沿着屏幕滑动,而是沿着场景中矩形的平面滑动。
现在,让我们详细介绍一下文档的每个部分。
名称以粗体显示,Unity3D的文档以斜体显示。
rect: RectTransform在里面找到一个点。此矩形定义要将屏幕空间坐标转换为的平面。
摄像机:与屏幕空间位置相关的摄像机。这是一个相机对象,它代表你的屏幕空间坐标。因此,这个函数将从这个摄像机的参考点,并调整它的相对于rect参数。
screenPoint:屏幕空间位置。这是你已经计算或得到的一点。从上面的例子看,也许你的鼠标位置也是如此?)你想要进入你矩形的平面。
localPoint: rect变换的局部空间中的点。这是一个"out“参数。这意味着您传入一个空白点对象,此函数将填充它。此localPoint由从凸轮空间转换为正向空间的screenPoint填充。
如果命中RectTransform的平面,则bool返回true,而不管点是否位于矩形内。这意味着该函数如果工作正常,将返回true,如果无法将凸轮空间点转换为正向空间,则返回false。它返回bool的原因是,它可以让您知道,如果它不能以其他方式计算,而不仅仅是破坏您的程序。在使用返回的out localPoint之前检查bool可能是个好主意,尽管对您所做的操作可能没有必要。
这只是提供一些警告和边缘案例的信息。但是我们已经讨论了文档的要点,所以如果您遇到使用这个函数的任何问题,我会让您再问一个问题。
希望这能有所帮助!如果还有其他问题,请告诉我。
很抱歉耽搁了你,刚刚看到你的评论。我也无法在这台计算机上访问Unity3D,因此这些示例不能保证工作正常。今晚我可能有时间写一个示例程序,但没有任何承诺(如果我无法做到的话,事先很抱歉!)
此函数只有两个不同的返回。它返回一个布尔值(true/false,yes/no)。
如果函数成功运行,它将返回“true”。这意味着您可以信任localPoint out参数中的某个点坐标(只有在您信任输入的范围内才能信任它)。
如果函数返回false,这意味着它无法计算localPoint。如果您传入一个空对象,或者可能是一个不活动的摄像机,则可能会发生这种情况。
设想情况:
你想要一些小动物在主菜单上跟着你的鼠标。
你需要的东西:
1)描述主菜单背景的RectTransform。
2)你的小动物的GameObject。
void Update()
{
// this is a hard-attach. you can move it over a Time.delta or
// give it some other behavior to make it more interesting.
RectTransformUtility.WorldToScreenPoint(menu_background_rect,
Input.mousePosition, Camera.main, critter.transform.position);
}
通过亲自尝试并亲自查看结果,您可能会更容易了解它所做的事情,但我希望这是一个足够好的起点。祝好运!
https://gamedev.stackexchange.com/questions/157325
复制相似问题