从 Unity 中的四元数和矢量 3 获取新位置



我有一个 Vector3 和一个四元数,获取前面(或后面(一定距离的位置坐标的最佳方法是什么?

我想做的是这样的:

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

只是无法访问变换,但具有(四元数(旋转和坐标(Vector3(

如果你将世界旋转乘以Vector3.forward,你会得到与使用相应的 transform.forward 相同的结果。

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

您可以使用Ray但那将是矫枉过正

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

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

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

编辑:

所以,没有转换。我们应该从四元数生成前向。我查看了Unity3D如何计算transform.forward并在这里找到了它:统一三维变换

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

正如你所说,你有一个四元数旋转和一个 Vec3 位置。因此,您可以像这样转换此函数:

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

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);

最新更新