我有一个 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);