unity3d 文档 本地坐标转世界坐标

2015年03月03日 10:54 0 点赞 0 评论 更新于 2025-11-21 16:36

在 Unity3D 场景中,若存在一个用于拍摄 3D 物体的透视摄像机,同时 NGUI 使用独立的正交摄像机,将本地坐标转换为世界坐标可按以下步骤操作:

步骤一:使用透视摄像机将世界坐标转换为屏幕坐标

首先,需要借助透视摄像机把世界坐标转换为屏幕坐标。在 Unity 中,可以使用 Camera.main.WorldToScreenPoint 方法来实现这一转换。代码示例如下:

Vector3 pos = Camera.main.WorldToScreenPoint(worldPos);
pos.z = 0f; // z 坐标必须设置为 0

这里需要特别注意,将 posz 坐标设置为 0 是非常关键的一步,它确保了后续转换的准确性。

步骤二:使用 UI 摄像机将屏幕坐标转换为 NGUI 的世界坐标

完成屏幕坐标的转换后,接下来要使用 NGUI 的正交摄像机(即 UICamera.currentCamera)将屏幕坐标转换为 NGUI 的世界坐标。代码如下:

Vector3 pos2 = UICamera.currentCamera.ScreenToWorldPoint(pos);

步骤三:将转换后的世界坐标赋值给 NGUI 控件

最后,将转换得到的 NGUI 世界坐标赋值给 NGUI 控件。假设 temp 为 NGUI 控件,代码如下:

temp.transform.position = pos2;

在网上搜索本地坐标转世界坐标的方法时,可能会找到多种实现方式。但经过实际测试,很多方法都是错误的,上述步骤所描述的方法经过验证是正确可行的。

作者信息

boke

boke

共发布了 3994 篇文章