public static Quaternion LookRotation (Vector3 forward, Vector3 upwards= Vector3.up); 官方解释: 使用指定的 forward 和 upwards 方向创建旋转。 Z 轴将与forward对齐,X 轴与 forward 和 upwards 之间的差积对齐,Y 轴与 Z 和 X 之间的差积对齐。 如果 forward 或 upwards 量值为零,则返回恒等。 如果 forward 和 upwards 共线,则返回恒等。
文档看得迷迷糊糊的,搜到的一些博客也没有讲到关键点上,自己研究了一会,总的来说, LookRotation的作用就是将方向转化为角度:传入一个方向将返回一个旋转角,某个物体被施加这个旋转角后,这个物体的forward方向将指向传入的方向。 这个方法几乎必须配合transform.rotation = Quaternion.LookRotation() 使用 ?
简单案例说明:
场景中新建一个正方体和球体,用LookRotation方法将“正方体看向球体”,并绘制输出3条射线。 ![场景物体摆放](https://img-blog.csdnimg.cn/f07222f44b6741c38207d2aa2a9befa5.jpg?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAIzJIeg==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center) 挂载到正方体上的脚本内容
public class NewBehaviourScript2 : MonoBehaviour{
private Transform sphere;
void Start(){
sphere = GameObject.Find("Sphere").transform;
}
void Update(){
Vector3 dir = sphere.position - transform.position;
Quaternion ang = Quaternion.LookRotation(dir);
transform.rotation = ang;
Debug.DrawRay(transform.position, ang.eulerAngles, Color.red);
Debug.DrawRay(transform.position, transform.forward * 100, Color.blue);
Debug.DrawRay(transform.position, dir, Color.green);
}
}
tip:球体坐标 - 正方体坐标 = 正方体指向球体的向量 ![向量减法](https://img-blog.csdnimg.cn/398817e255414dc7bae5e66c74de810b.jpg?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAIzJIeg==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center) 运行场景 ![场景运行Gif](https://img-blog.csdnimg.cn/101c26929bb449c29479472f4dcdc1d8.gif#pic_center) ![场景运行jpg](https://img-blog.csdnimg.cn/47b1889b1f394156b4640a73babc1866.jpg?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAIzJIeg==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center) Vector3 dir = sphere.position - transform.position; Quaternion ang = Quaternion.LookRotation(dir); 绿色射线:以向量dir为方向。 蓝色射线:以正方体forward为方向。 红色射线:以四元数ang为方向;是正方体的旋转轴线。 ? Quaternion.LookRotation (Vector3 forward, Vector3 upwards= Vector3.up) : 传入一个forward方向将返回一个旋转角,某个物体被施加这个旋转角后,这个物体的forward方向将对齐至传入的forward方向。
|