unity相机操作

来源:互联网 发布:汉高祖知乎 编辑:程序博客网 时间:2024/05/18 14:42
using System;using UnityEngine;public class FreeCamera : MonoBehaviour{    private const float DragFactor = 30;    //跟随相机的物体    private GameObject _cameraFollowObj, _cameraFollowObj2;    public float _factorX = 0.5f, _factorY = 0.5f;    private Camera _localCamera;    [SerializeField]    private float _mouseSensitivity = 20.0f;    private GameObject _moveToPath;    public Vector3 _pos;    private float _scrollRate = 600;    [SerializeField]    private float _speed = 30.0f;    public float _www = 10;    public float _zzz = 2;    //public Vector3 ttt = new Vector3(0, -1, 0);    private void Awake()    {        _localCamera = GetComponent<Camera>();        _cameraFollowObj = GameObject.Find("Sphere_FollowCamera");        _cameraFollowObj2 = GameObject.Find("Sphere_FollowCamera (1)");        _moveToPath = GameObject.Find("MoveOnPath");//        var rd = gameObject.AddComponent<LineRenderer>();//        rd.SetVertexCount(2);//        rd.SetWidth(_zzz, _zzz);//        rd.SetColors(Color.red, Color.red);    }    private void UpdateFollowSphere()    {#if false        RaycastHit hit;        Ray ray = new Ray(_cameraFollowObj.transform.position, Vector3.down);        if (Physics.Raycast(ray, out hit, _www))        {//            var rd = gameObject.GetComponent<LineRenderer>();//            rd.SetPosition(0, _cameraFollowObj.transform.position);//            rd.SetPosition(1, new Vector3(_cameraFollowObj.transform.position.x, hit.transform.position.y, _cameraFollowObj.transform.position.z));//            rd.SetWidth(_zzz, _zzz);        //            Debug.Log(hit.transform.gameObject.name);        //            Debug.Log(hit.transform.position);        //            _cameraFollowObj2.transform.position = new Vector3(_cameraFollowObj2.transform.position.x,        //                hit.transform.position.y,        //                _cameraFollowObj2.transform.position.z);            Vector3 pos = _cameraFollowObj.transform.position;            Debug.Log(hit.transform.position.y   + ",   " + hit.point.y);            //_cameraFollowObj2.transform.rotation = _cameraFollowObj.transform.rotation;            _cameraFollowObj2.transform.position = new Vector3(pos.x, hit.point.y, pos.z);        }#endif//        Vector3 centerPos = new Vector3(Screen.width * .5f, Screen.height * .5f, 0);//        Vector3 pos = Camera.main.ScreenToWorldPoint(centerPos);//        Ray ray = new Ray(_cameraFollowObj.transform.position, Vector3.down);//        RaycastHit hit;////        if (Physics.Raycast(ray, out hit))//        {//            _cameraFollowObj2.transform.position = hit.point;//            Debug.Log(hit.point);//        }    }    private void Update()    {      //  UpdateFollowSphere();        if (Input.GetMouseButton(0))        {            float deltaX = Input.GetAxis("Mouse X")*Time.deltaTime*60;            float deltaY = Input.GetAxis("Mouse Y")*Time.deltaTime*60;            if (Mathf.Abs(deltaX) > Mathf.Abs(deltaY))                transform.RotateAround(_cameraFollowObj.transform.position, Vector3.up, deltaX);            else transform.RotateAround(_cameraFollowObj.transform.position, transform.right, -deltaY);        }        if (Input.GetMouseButton(2))        {            float deltaX = Input.GetAxis("Mouse X")*Time.deltaTime*DragFactor;            float deltaY = Input.GetAxis("Mouse Y")*Time.deltaTime*DragFactor;            transform.position += transform.right*deltaX;            transform.position += Quaternion.AngleAxis(-90, Vector3.up)*transform.right*deltaY;        }        if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift))        {            _speed = 40;            _mouseSensitivity = 80;            _scrollRate = 3000;        }        else if (Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt))        {            _speed = 0.5f;            _mouseSensitivity = 10;            _scrollRate = 100;        }        else        {            _speed = 10;            _mouseSensitivity = 50;            _scrollRate = 600;        }        float scrollWheel = Input.GetAxis("Mouse ScrollWheel")*_scrollRate*Time.deltaTime;        if (Math.Abs(scrollWheel) > 0.00001)        {            transform.position = Vector3.LerpUnclamped(transform.position, _cameraFollowObj.transform.position,                scrollWheel);        }        if (Input.GetKey(KeyCode.W))        {            transform.position += Quaternion.AngleAxis(-90, Vector3.up)*transform.right*_speed*Time.deltaTime;        }        if (Input.GetKey(KeyCode.S))        {            transform.position -= Quaternion.AngleAxis(-90, Vector3.up)*transform.right*_speed*Time.deltaTime;        }        if (Input.GetKey(KeyCode.A))        {            transform.position -= transform.right*_speed*Time.deltaTime;        }        if (Input.GetKey(KeyCode.D))        {            transform.position += transform.right*_speed*Time.deltaTime;        }        if (Input.GetKey(KeyCode.UpArrow))        {            transform.position += Vector3.up*_speed*Time.deltaTime * 0.6f;        }        if (Input.GetKey(KeyCode.DownArrow))        {            transform.position -= Vector3.up*_speed*Time.deltaTime * 0.6f;        }        //旋转        if (Input.GetKey(KeyCode.Q))        {            transform.RotateAround(_cameraFollowObj.transform.position, transform.right, -_mouseSensitivity*Time.deltaTime);        }        if (Input.GetKey(KeyCode.E))        {            transform.RotateAround(_cameraFollowObj.transform.position, transform.right, _mouseSensitivity*Time.deltaTime);        }#if false         if (Input.GetKey(KeyCode.Z))         {             transform.RotateAround(cameraFollowObj.transform.position, transform.forward, -mouseSensitivity * Time.deltaTime);         }         if (Input.GetKey(KeyCode.X) || Input.GetKey(KeyCode.C))         {             transform.RotateAround(cameraFollowObj.transform.position, transform.forward, mouseSensitivity * Time.deltaTime);         }#endif        if (Input.GetKey(KeyCode.LeftArrow))        {            transform.RotateAround(_cameraFollowObj.transform.position, Vector3.up, _mouseSensitivity*Time.deltaTime);        }        if (Input.GetKey(KeyCode.RightArrow))        {            transform.RotateAround(_cameraFollowObj.transform.position, Vector3.up, -_mouseSensitivity*Time.deltaTime);        }    }}
0 0
原创粉丝点击