有一个物体,现在我们需要将它的Z轴方向向量为V1,Y轴方向向量为V2。 前提V1垂直V2。 如何实现呢,看代码。
transform.forward = V1;
float angle = Vector3.Angle(V2, transform.up);
transform.Rotate(new Vector3(0,0,angle));
看吧就是这么简单。 等等,难道问题就这样结束了吗?显然没有。 angle 的值永远为正数,因为我们只求了角度,不知道V2是在transform.up的左边还是右边。 也有可能转动 -angle 角度。 所以我们需要transform.up叉乘V2,记结果为C,C再点乘transform.forward,Unity为左手坐标系。 点乘结果为正数时,V2在transform.up右边,需要转动 angle。反之,V2在transform.up左边,需要转动 -angle。
代码如下
transform.forward = V1;
float angle = Vector3.Angle(V2, transform.up);
Vector3 b = Vector3.Cross(transform.up ,V2);
if(Vector3.Dot(transform.forward ,b) > 0)
transform.Rotate(new Vector3(0,0,angle));
else
transform.Rotate(new Vector3(0,0,- angle));
|