如何获得相对于任意旋转的平面的xy轴的坐标

时间:2017-07-01 20:12:02

标签: c# unity3d 3d

给定一个具有任意旋转的平面上的随机点,我怎么能得到该点相对于平面上xy轴的xy坐标,假设我在平面上调用了一个原点的任意点?我可以在世界空间中获得那个点的绝对xyz坐标(使用光线投射),但相对的坐标让我感到难过。

1 个答案:

答案 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);
    }
}