Unity之Quaternion学习二

using UnityEngine;
using System.Collections;

public class CameraMove : MonoBehaviour {


    public Transform Target;
    public float xSpeed = 200;
    public float ySpeed = 200;
    public float mSpeed = 10;
    public float yMinLimit = -50;
    public float yMaxLimit = 50;
    public float distance = 2;
    public float minDis = 2;
    public float maxDis = 30;

    public bool needDaming = true;
    float damping = 5.0f;

    public float x = 0.0f;
    public float y = 0.0f;

	// Use this for initialization
	void Start () {

        Vector3 angles = transform.eulerAngles;
        x = angles.x;
        y = angles.y;
	}
	
	// Update is called once per frame
	void Update () {

        if (Target)
        {
            if (Input.GetMouseButton(1))
            {
                x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
                y += Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
                y = ClampAngle(y, yMinLimit, yMaxLimit);
            }

            distance -= Input.GetAxis("Mouse ScrollWheel") * mSpeed;
            distance = Mathf.Clamp(distance, minDis, maxDis);
            //这里的角度变化了 Input.GetAxis("Mouse Y"):是上下的变化关系 就是对应的x轴的旋转,Input.GetAxis("Mouse X"):是y轴的旋转 所以下面的欧拉角度x,y的值会发生变化
            //沿着y轴旋转x度,沿着x轴旋转y度,z轴旋转角度不变
            Quaternion rotation = Quaternion.Euler(y, x, 0.0f);
            //镜头的远近 沿着Z轴平移-distance
            Vector3 disVector = new Vector3(0.0f, 0.0f, -distance);
            //x,y轴旋转角度之后,并沿Z轴运动-distance距离 + 当前的位置  就是旋转后的新位置
            Vector3 position = rotation * disVector + Target.position;
            //旋转插值 平滑效果
            transform.rotation = Quaternion.Lerp(transform.rotation, rotation, Time.deltaTime * damping);
            //两个向量之间的线性插值。
            transform.position = Vector3.Lerp(transform.position, position, Time.deltaTime * damping);

        }
    }

    static float ClampAngle(float angle, float min, float max)
    {
        if (angle < -360)
            angle += 360;
        if (angle > 360)
            angle -= 360;
        return Mathf.Clamp(angle, min, max);
    }

}


 

你可能感兴趣的:(unity,Quaternion,相机旋转)