如何统一将方向 Vector3 向上旋转一个角度
how do I rotate a direction Vector3 upwards by an angle in unity
这是我的方向向量
new Vector3(target.transform.position.x - projectile.position.x, 0, target.transform.position.z - projectile.position.z).normalized
我尝试将它乘以 Quaternion.AngleAxis(45, Vector3.up)
但这根本行不通
Vector3.left、右等所有其他方向也无济于事
我唯一能观察到的是当我移动目标或射弹时角度的变化方式
你很接近。使用叉积得到你需要的轴,在 AngleAxis
中使用它,然后最后将该旋转应用到你的起始方向:
Vector3 RotateTowardsUp(Vector3 start, float angle)
{
// if you know start will always be normalized, can skip this step
start.Normalize();
Vector3 axis = Vector3.Cross(start, Vector3.up);
// handle case where start is colinear with up
if (axis == Vector3.zero) axis = Vector3.right;
return Quaternion.AngleAxis(angle, axis) * start;
}
这是我的方向向量
new Vector3(target.transform.position.x - projectile.position.x, 0, target.transform.position.z - projectile.position.z).normalized
我尝试将它乘以 Quaternion.AngleAxis(45, Vector3.up)
但这根本行不通
Vector3.left、右等所有其他方向也无济于事
我唯一能观察到的是当我移动目标或射弹时角度的变化方式
你很接近。使用叉积得到你需要的轴,在 AngleAxis
中使用它,然后最后将该旋转应用到你的起始方向:
Vector3 RotateTowardsUp(Vector3 start, float angle)
{
// if you know start will always be normalized, can skip this step
start.Normalize();
Vector3 axis = Vector3.Cross(start, Vector3.up);
// handle case where start is colinear with up
if (axis == Vector3.zero) axis = Vector3.right;
return Quaternion.AngleAxis(angle, axis) * start;
}