//放在攝像頭上,實現旋轉、縮放觀察物體 using UnityEngine; public class BaseCam : MonoBehaviour { public Vector3 mousePos1; //記錄滑鼠點下去瞬間的位置 public Vector3 mousePos2; //記錄滑鼠任何時刻的位置 public Quaternion start_qua; //角度使用四元數 public Vector3 start_pos; //位置座標 public int offsetx = 1; public int offsety = 1; // Use this for initialization void Start() { //記錄相機開始的角度與位置 start_qua = transform.rotation; start_pos = transform.position; } // Update is called once per frame void Update() { //記錄滑鼠實時移動的點 mousePos2 = Input.mousePosition; } void OnGUI() { // keyboard if (Input.GetKey(KeyCode.UpArrow)) { offsetx = 5; transform.RotateAround(new Vector3(0, 0, 0), transform.right, -Time.deltaTime * offsety * 5f); //以物體上方為旋轉軸(Vector3.up == new Vector3(0, 1.0f, 0)),物體左右旋轉角度與滑鼠橫向移動距離相關,變化速率2f } if (Input.GetKey(KeyCode.DownArrow)) { //offsetx = -5; transform.RotateAround(new Vector3(0, 0, 0), transform.right, Time.deltaTime * offsety * 5f); //以物體上方為旋轉軸(Vector3.up == new Vector3(0, 1.0f, 0)),物體左右旋轉角度與滑鼠橫向移動距離相關,變化速率2f } if (Input.GetKey(KeyCode.RightArrow)) { offsety = 10; //以物體上方為旋轉軸(Vector3.up == new Vector3(0, 1.0f, 0)),物體左右旋轉角度與滑鼠橫向移動距離相關,變化速率2f transform.RotateAround(new Vector3(0, 0, 0), Vector3.up, Time.deltaTime * offsetx * 5f); } if (Input.GetKey(KeyCode.LeftArrow)) { offsety = 10; //以物體上方為旋轉軸(Vector3.up == new Vector3(0, 1.0f, 0)),物體左右旋轉角度與滑鼠橫向移動距離相關,變化速率2f transform.RotateAround(new Vector3(0, 0, 0), Vector3.up, -Time.deltaTime * offsetx * 5f); } //滑鼠左鍵 if (Input.GetMouseButton(0)) { mousePos1 = Input.mousePosition; //記錄滑鼠點選瞬間的點 Vector3 offset = mousePos1 - mousePos2; //記錄滑鼠移動的距離 //上下與左右 旋轉分開,絕對值比較 if (Mathf.Abs(offset.x) > Mathf.Abs(offset.y)) { //以物體上方為旋轉軸(Vector3.up == new Vector3(0, 1.0f, 0)),物體左右旋轉角度與滑鼠橫向移動距離相關,變化速率2f transform.RotateAround(new Vector3(0, 0, 0), Vector3.up, Time.deltaTime * offset.x * 5f); } else { //以世界座標右方為旋轉軸(transform.right,是會變化的量),物體上下旋轉角度與滑鼠縱向移動距離相關,變化速率2f transform.RotateAround(new Vector3(0, 0, 0), transform.right, -Time.deltaTime * offset.y * 5f); } //列印資料transform.right變數 Debug.Log("pos: "+transform.right.ToString()); } //滑鼠中鍵,物體恢復原來的角度與位置 if (Input.GetMouseButton(2)) { transform.rotation = start_qua; transform.position = start_pos; } //滑鼠中鍵滑動,物體縮放,攝像頭前後移動距離範圍在2f~5f,變化速率3f if (Input.GetAxis("Mouse ScrollWheel") > 0f && Vector3.Distance(transform.position, new Vector3(0, 0, 0)) > 2f) { transform.Translate(Vector3.forward * Time.deltaTime * Input.GetAxis("Mouse ScrollWheel") * 5f); } if (Input.GetAxis("Mouse ScrollWheel") < 0f && Vector3.Distance(transform.position, new Vector3(0, 0, 0)) < 5f) { transform.Translate(Vector3.back * Time.deltaTime * (-Input.GetAxis("Mouse ScrollWheel")) * 5f); } } }