unity3d 文档 本地坐标转世界坐标
在 Unity3D 场景中,若存在一个用于拍摄 3D 物体的透视摄像机,同时 NGUI 使用独立的正交摄像机,将本地坐标转换为世界坐标可按以下步骤操作:
步骤一:使用透视摄像机将世界坐标转换为屏幕坐标
首先,需要借助透视摄像机把世界坐标转换为屏幕坐标。在 Unity 中,可以使用 Camera.main.WorldToScreenPoint 方法来实现这一转换。代码示例如下:
Vector3 pos = Camera.main.WorldToScreenPoint(worldPos);
pos.z = 0f; // z 坐标必须设置为 0
这里需要特别注意,将 pos 的 z 坐标设置为 0 是非常关键的一步,它确保了后续转换的准确性。
步骤二:使用 UI 摄像机将屏幕坐标转换为 NGUI 的世界坐标
完成屏幕坐标的转换后,接下来要使用 NGUI 的正交摄像机(即 UICamera.currentCamera)将屏幕坐标转换为 NGUI 的世界坐标。代码如下:
Vector3 pos2 = UICamera.currentCamera.ScreenToWorldPoint(pos);
步骤三:将转换后的世界坐标赋值给 NGUI 控件
最后,将转换得到的 NGUI 世界坐标赋值给 NGUI 控件。假设 temp 为 NGUI 控件,代码如下:
temp.transform.position = pos2;
在网上搜索本地坐标转世界坐标的方法时,可能会找到多种实现方式。但经过实际测试,很多方法都是错误的,上述步骤所描述的方法经过验证是正确可行的。