using UnityEngine; using System.Collections; namespace Wing.Utils { public class FreeCamera : MonoBehaviour { //for rotate private float m_deltX = 0f; private float m_deltY = 0f; //for zoom private float m_distance = 10f; private float m_mSpeed = 5f; void Start() { //GetComponent().transform.localPosition = new Vector3(0, m_distance, 0); } void Update() { //鼠标右键点下控制相机旋转; if (Input.GetMouseButton(1)) { m_deltX += Input.GetAxis("Mouse X") * m_mSpeed; m_deltY -= Input.GetAxis("Mouse Y") * m_mSpeed; m_deltX = ClampAngle(m_deltX, -360, 360); m_deltY = ClampAngle(m_deltY, -70, 70); GetComponent().transform.rotation = Quaternion.Euler(m_deltY, m_deltX, 0); } //鼠标中键点下场景缩放; if (Input.GetAxis("Mouse ScrollWheel") != 0) { //自由缩放方式; m_distance = Input.GetAxis("Mouse ScrollWheel") * 10f; GetComponent().transform.localPosition = GetComponent().transform.position + GetComponent().transform.forward * m_distance; } //鼠标点击场景移动; if (Input.GetMouseButton(2)) { var dx = -Input.GetAxis("Mouse X") * m_mSpeed * 0.1f; var dy = -Input.GetAxis("Mouse Y") * m_mSpeed * 0.1f; GetComponent().transform.Translate(new Vector3(dx, dy)); } //相机复位远点; if (Input.GetKey(KeyCode.Space)) { m_distance = 10.0f; GetComponent().transform.localPosition = new Vector3(0, m_distance, 0); } } //规划角度; float ClampAngle(float angle, float minAngle, float maxAgnle) { if (angle <= -360) angle += 360; if (angle >= 360) angle -= 360; return Mathf.Clamp(angle, minAngle, maxAgnle); } } }