首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >单位RectTransformUtility.ScreenPointToLocalPointInRectangle

单位RectTransformUtility.ScreenPointToLocalPointInRectangle
EN

Game Development用户
提问于 2018-04-09 14:23:44
回答 1查看 5.1K关注 0票数 2

统一的RectTransformUtility.ScreenPointToLocalPointInRectangle是做什么的?我读过统一文档,但我没有得到明确的含义。

EN

回答 1

Game Development用户

回答已采纳

发布于 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

未测试的示例代码

代码语言:javascript
运行
复制
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);
}

通过亲自尝试并亲自查看结果,您可能会更容易了解它所做的事情,但我希望这是一个足够好的起点。祝好运!

票数 4
EN
页面原文内容由Game Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://gamedev.stackexchange.com/questions/157325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档