我有一个Vector3和一个四元数,在前面(或后面)获得一个位置坐标的最佳方法是什么。
我想做的是:
Gizmos.color = Color.red;
var direction = transform.TransformDirection(Vector3.forward) * 1000;
Gizmos.DrawRay(transform.position, direction);
无法访问变换,但使用(四元数)旋转和坐标(Vector3)
答案 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);