Unity(4)-Quaternion-API学习笔记

b站学习笔记
链接:https://www.bilibili.com/video/BV12s411g7gU?p=171

四元数概念

Unity(4)-Quaternion-API学习笔记_第1张图片

四元数变量

Unity(4)-Quaternion-API学习笔记_第2张图片

 private void OnGUI()
    {
        if (GUILayout.Button(""))
        {
            //1.欧拉角 --> 四元数
            //Quaternion.Euler(欧拉角);

            //2.四元数 --> 欧拉角
            Quaternion qt = this.transform.rotation;
            Vector3 euler = qt.eulerAngles;

            //3.轴/角
            //Quaternion.Euler(0,50,0);
            this.transform.rotation = Quaternion.AngleAxis(50, Vector3.up);
        }
        }
静态函数

Unity(4)-Quaternion-API学习笔记_第3张图片

   public Transform tf;
if (GUILayout.Button("LookRotation"))
        {
            //Z轴指向一个方向
            //4.当前物体注视tf旋转
            Vector3 dir = tf.position - this.transform.position;
            this.transform.rotation = Quaternion.LookRotation(dir);
            //this.transform.LookAt(tf);
        }
        if (GUILayout.RepeatButton("Lerp"))
        {
            //5.差值旋转Lerp
            Quaternion dir = Quaternion.LookRotation(tf.position - this.transform.position);
            this.transform.rotation=Quaternion.Lerp(this.transform.rotation,dir,0.1f);

        }
        if (GUILayout.RepeatButton("RotateTowards"))
        {
            //6.匀速旋转
            Quaternion dir = Quaternion.LookRotation(tf.position - this.transform.position);
            this.transform.rotation = Quaternion.RotateTowards(this.transform.rotation, dir, 0.1f);

        }
        if (GUILayout.RepeatButton("Angle"))
        {
            //Lerp无限接近但达不到终点 如果用Lerp达到终点如何做?
            Quaternion dir = Quaternion.LookRotation(tf.position - this.transform.position);
            this.transform.rotation = Quaternion.Lerp(this.transform.rotation, dir, 0.1f);
            //7.判断角度差
            //如果当前旋转角度 接近目标旋转角度
            if (Quaternion.Angle(this.transform.rotation,dir)<1)
            {
                this.transform.rotation = dir;
            }

        }
        if (GUILayout.RepeatButton("right"))
        {
            //8.x轴注视旋转 t1
            //this.transform.right = tf.position - this.transform.position;
            //x轴正方向-->注视目标位置的方向
            Quaternion dir= Quaternion.FromToRotation(Vector3.right,tf.position-this.transform.position);
            this.transform.rotation = dir;
            //如需慢慢转,可调Lerp
        }

    }
 

练习:根据用户输入的方向旋转角色,并向前移动

public float moveSpeed = 5;
public float rotateSpeed = 2;

private void Update(){
	float hor = Input.GetAxis("Horizontal");   //a  d
	float ver = Input.GetAxis("Vertical");  //w  s 
	if(hor!=0 || ver!=0)
	MovementRotateion(hor,ver);
}

private void MovementRotateion(float hor,float ver){
	Quaternion dir = Quaternion.LookRotation(new Vectoe3(hor,0,ver));
	this.transform.rotation = Quaternion.Lerp(this.transform.rotation,dir,Time.deltaTime*rotateSpeed);
	this.transform.Translate(0,0,Time.deltaTime*moveSpeed);
}

你可能感兴趣的:(Unity3D学习笔记,unity,3d游戏,数学)