给定一个具有任意旋转的平面上的随机点,我怎么能得到该点相对于平面上xy轴的xy坐标,假设我在平面上调用了一个原点的任意点?我可以在世界空间中获得那个点的绝对xyz坐标(使用光线投射),但相对的坐标让我感到难过。
答案 0 :(得分:1)
让我们看看现在我是否理解正确。您可以使用相机中的光线投射来击中飞机上的某个点。光线投射返回世界位置,但您想要一个本地位置(并且原点不同于0?)。 InverseTransformPoint可以做到这一点。 下面的代码使用鼠标选择一个屏幕点并创建一个光线投射,以获得相对于对象命中的命中点的本地位置。
if(Input.GetMouseButtonDown(0))
{
Ray r = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(r,out hit))
{
Debug.Log(hit.transform.InverseTransformPoint(hit.point)); // point relative to local (0,0)
Debug.Log(hit.transform.InverseTransformPoint(hit.point- new Vector3(0.5f,0.5f,0)));// local point with origin as local (0.5,0.5)
}
}
[旧答案]
如果我正确地理解了你的问题,你想获得相对于该飞机中当地位置的世界位置。为此,您可以使用平面变换。方法Transform.TransformPoint可用于将本地位置转换为世界位置。
下面的示例使用相对于对象的本地位置,并在update方法中获取世界位置。如果在游戏运行时旋转飞机,它将改变相对于本地位置的世界位置。
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour
{
public Vector3 localPos;
public Vector3 worldPos;
void Update()
{
worldPos = transform.TransformPoint(localPos);
}
}