从Unity中的Quaternion和Vector3获取新的位置

时间:2017-05-09 11:38:20

标签: c# unity3d

我有一个Vector3和一个四元数,在前面(或后面)获得一个位置坐标的最佳方法是什么。

我想做的是:

Gizmos.color = Color.red;
var direction = transform.TransformDirection(Vector3.forward) * 1000;
Gizmos.DrawRay(transform.position, direction);

无法访问变换,但使用(四元数)旋转和坐标(Vector3)

3 个答案:

答案 0 :(得分:2)

我没有测试,但这应该有效

Vec3 location = transform.forward*distance + transform.position;

距离是游戏对象的单位长度。

编辑:

所以,没有转变。我们应该从四元数中产生前进。我看了Unity3D如何计算transform.forward并在此处找到它: Unity3D Transform

public Vector3 forward
{
    get
    {
        return this.rotation * Vector3.forward;
    }
    set
    {
        this.rotation = Quaternion.LookRotation(value);
    }
}

你有一个四元数轮换,你有一个Vec3位置,正如你所说的那样。所以,你可以像这样转换这个函数:

Vec3 location = rotation*Vector3.forward*distance + position;

答案 1 :(得分:2)

如果将世界轮换与Vector3.forward相乘,则与使用相应的transform.forward相同

public Vector3 GetPosition(Quaternion rotation, Vector3 position, float distance)
{
    Vector3 direction = rotation * Vector3.forward;
    return position + (direction  * distance);
}

你可以使用Ray,但那会有点过分

答案 2 :(得分:1)

Ray结构及其GetPoint函数用于通过提供您想要找到的起点,方向和距离来计算未知距离。

让我们说这是位置和方向

Vector3 startingPostion = new Vector3(4, 6, 2);
Quaternion theDirection = Quaternion.identity;

找到100米的距离。

Ray ray = new Ray();
//Set the starting point
ray.origin = startingPostion;
//Set the direction
ray.direction = Vector3.forward + theDirection.eulerAngles;

//Get the distance 
ray.GetPoint(100);

或者

Ray ray = new Ray(startingPostion, worldRotation * Vector3.forward);
//Get the distance 
ray.GetPoint(100);