unity 控制摄像机旋转和缩放

来源:互联网 发布:linux 完全卸载svn 编辑:程序博客网 时间:2024/04/27 22:54

在做项目的时候,有用到相机绕着某个物体旋转和近距离查看的功能。所以过来贴贴代码。


/// <summary>/// Mouse orbit./// This script use to control a main camera/// </summary>using UnityEngine;using System.Collections;public class MouseOrbit : MonoBehaviour{    public GameObject target; //a target look at    public float xSpeed; //speed pan x    public float ySpeed; //speed pan y    public float yMinLimit; //y min limit    public float yMaxLimit; //y max limit    public float scrollSpeed; //scroll speed    public float zoomMin;  //zoom min    public float zoomMax; //zoom max    private float distance;    private float distanceLerp;    private Vector3 position;    private bool isActivated;    private float x;    private float y;    // Use this for initialization    void Start()    {        //Warning when not found target        if (target == null)        {            target = GameObject.FindGameObjectWithTag("Player");            if (target == null)            {                Debug.LogWarning("Don't found player tag please change player tag to Player");            }        }        //Setup Pos        Vector3 angles = transform.eulerAngles;        x = angles.y;        y = angles.x;        CalDistance();    }    void LateUpdate()    {        ScrollMouse();        RotateCamera();    }    //Roate camera method    void RotateCamera()    {        if (Input.GetMouseButtonDown(1))        {            isActivated = true;        }        if (Input.GetMouseButtonUp(1))        {            isActivated = false;        }        if (isActivated)        {            y -= Input.GetAxis("Mouse Y") * ySpeed;            x += Input.GetAxis("Mouse X") * xSpeed;            y = ClampAngle(y, yMinLimit, yMaxLimit);            Quaternion rotation = Quaternion.Euler(y, x, 0);            Vector3 calPos = new Vector3(0, 0, -distanceLerp);            position = rotation * calPos + target.transform.position;            transform.rotation = rotation;            transform.position = position;        }    }    //Calculate Distance Method    void CalDistance()    {        distance = zoomMax;        distanceLerp = distance;        Quaternion rotation = Quaternion.Euler(y, x, 0);        Vector3 calPos = new Vector3(0, 0, -distanceLerp);        position = rotation * calPos + target.transform.position;        transform.rotation = rotation;        transform.position = position;    }    //Scroll Mouse Method    void ScrollMouse()    {        distanceLerp = Mathf.Lerp(distanceLerp, distance, Time.deltaTime * 5);        if (Input.GetAxis("Mouse ScrollWheel") != 0)        {            // get the distance between camera and target            distance = Vector3.Distance(transform.position, target.transform.position);            distance = ScrollLimit(distance - Input.GetAxis("Mouse ScrollWheel") * scrollSpeed, zoomMin, zoomMax);        }    }    //Scroll Limit Method    float ScrollLimit(float dist, float min, float max)    {        if (dist < min)            dist = min;        if (dist > max)            dist = max;        return dist;    }    //Clamp Angle Method    float ClampAngle(float angle, float min, float max)    {        if (angle < -360)            angle += 360;        if (angle > 360)            angle -= 360;        return Mathf.Clamp(angle, min, max);    }}

这就是全部的代码,target是我们要围绕的目标对象。


0 0