Unity3D 旋轉相機視角 鏡頭縮放 拖動相機視角 Game視窗還原Sence視窗功能
阿新 • • 發佈:2019-02-03
最近在做一個工程,在Game視窗內用到了和Sence視窗內差不多的功能,研究了一段,做了一個小小的Demo,一下貼出一部分的程式碼,還有工程連結,有興趣的朋友可以參考借鑑,轉載請註明出處。
3、兩個指令碼都掛在相機的視角下就可以了,左鍵按住滑動滑鼠可以讓相機繞旋轉中心旋轉,右鍵按住後可以拖動相機左右上下移動,當旋轉中心為某個特定物體時,相機會圍繞著該物體為中心做旋轉。
1、以下是效果圖
2、開始貼程式碼吧
第一個新建一個C#指令碼MouseOrbit,這個指令碼是借鑑了unity3D自帶的MouseOrbit指令碼,我在其基礎上進行了修改,刪掉一部分內容,增加了不少東西,用射線檢測來檢測螢幕中心點物體的碰撞盒,並以此為旋轉中心,如果螢幕中心沒有物體,就採用偏移向量的方式來重新定位旋轉中心,大體上功能是沒有什麼問題,如果有朋友有更好的想法歡迎指點和相互交流。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MouseOrbit : MonoBehaviour { //偏移量和中心店 Vector3 offest; Vector3 target; //記錄第一座標 Vector3 P1; float distance = 15.0f; float xSpeed = 250.0f; float ySpeed = 120.0f; float x = 0.0f; float y = 0.0f; //相機移動速度 float Speed = 40.0f; // Use this for initialization void Start () { var angles = transform.eulerAngles; x = angles.y; y = angles.x; //旋轉中心初始點 target = new Vector3(0, 0, 0); } private void Update() { } void LateUpdate() { if (Input.GetMouseButton(0)) { x += Input.GetAxis("Mouse X") * xSpeed * 0.02f; y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f; //返回一個四元數 繞某個軸旋轉某個角度 var rotation = Quaternion.Euler(y, x, 0); var position = rotation * new Vector3(0.0f, 0.0f, -distance) + target; transform.rotation = rotation; transform.position = position; } else if(Input.GetMouseButton(1)) { float x; float y; x = Input.GetAxis("Mouse X"); y = Input.GetAxis("Mouse Y"); transform.Translate(new Vector3(-x, -y, 0) * Time.deltaTime * Speed); //print("轉換過的:" + Camera.main.ScreenToWorldPoint(new Vector3(x, y, 0))); } if (Input.GetMouseButtonDown(1)) { P1 = transform.position; } if (Input.GetMouseButtonUp(1)) { ////利用射線檢測來獲取螢幕中心點座標 Ray ray = Camera.main.ScreenPointToRay(new Vector3(Screen.width / 2, Screen.height / 2, 0)); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.collider) { target = new Vector3(hit.point.x, hit.point.y, hit.point.z); distance = (hit.point - transform.position).magnitude; print(hit.collider.name); } } else { offest = transform.position - P1; target = target + offest; distance = (target - transform.position).magnitude; } } } }
3、兩個指令碼都掛在相機的視角下就可以了,左鍵按住滑動滑鼠可以讓相機繞旋轉中心旋轉,右鍵按住後可以拖動相機左右上下移動,當旋轉中心為某個特定物體時,相機會圍繞著該物體為中心做旋轉。
4、附上原始碼工程,有需要的可以下載
http://download.csdn.net/download/mr_sun88/10194839
作者:大蝦小二
CSDN:Mr_Sun88
轉載請註明出處!