關於相機實現在scene場景中的效果,包括移動,旋轉,拉近,方便在遊戲執行時檢視場景
阿新 • • 發佈:2019-01-08
我們都知道在scene場景內利用滑鼠可以隨意檢視場景,拉近拉遠,移動,那麼在遊戲執行時是無法做到的,這就需要我們利用程式碼來控制相機。
首先我們需要以下欄位等,儲存相機元件是為了可以使程式碼靈活。,不必掛載相機上。有兩種模式,一種計算基於螢幕中心,即你的操作中心點在螢幕中心,還有一種是基於上一幀點選位置。
public Camera cam;//相機元件 //計算中心點選取 public enum MouseCenter { ScreeenCenter,//螢幕中心 LastPosition,//點選點 } public MouseCenter mouseCenter= MouseCenter.LastPosition ;// public float RotateSpeed = 1;//旋轉速度 public float MoveSpeed = 10;//移動速度 public float ZoomSpeed=1;//縮放速度 private Vector3 MoveDir;//方向 private Vector3 RotateDir;// public int Sensitivity = 1;//靈敏度 private Vector2 mouseDownPos;//記錄按下時滑鼠位置
在這裡我對靈敏度進行強行限制,阻止負值。.
void Start()
{
if (Sensitivity < 0)
Sensitivity = 0;
}
下邊為計算,在update中呼叫:
//計算 private void Calculate() { Vector2 newpos = Vector2.zero; switch (mouseCenter) { case MouseCenter.ScreeenCenter: newpos = new Vector2(Input.mousePosition.x - Screen.width / 2, Input.mousePosition.y - Screen.height / 2);//獲取滑鼠點相對螢幕中心向量差 break; case MouseCenter.LastPosition: newpos = new Vector2(Input.mousePosition.x - mouseDownPos.x, Input.mousePosition.y - mouseDownPos.y);//獲取基於按下瞬間的向量差值 mouseDownPos = Input.mousePosition; break; default: return; } Space spacetype = Space.Self; if (Mathf.Abs(newpos.x) > Sensitivity || Mathf.Abs(newpos.y) > Sensitivity)//拖動距離太短,不計算 { //計算 if (Mathf.Abs(newpos.x) > Mathf.Abs(newpos.y)) { if (newpos.x < 0) { MoveDir = cam.transform.right; RotateDir = Vector3.down; } else { MoveDir = -cam.transform.right; RotateDir = Vector3.up; } } else { if (newpos.y < 0) { MoveDir = Vector3.left; RotateDir = Vector3.right; } else { MoveDir = Vector3.right; RotateDir = Vector3.left; } } if (Input.GetMouseButton(1)) { if (Mathf.Abs(newpos.x) > 10 && Mathf.Abs(newpos.y) > 10) spacetype = Space.World; cam.transform.Rotate(RotateDir*RotateSpeed * Time.deltaTime * 50, spacetype); } if (Input.GetMouseButton(2)) { //transform.Translate(MoveDir * MoveSpeed * Time.deltaTime * 10); cam.transform.position += MoveDir * MoveSpeed * Time.deltaTime * 10; return; } } else { float h = Input.GetAxis("Mouse ScrollWheel"); if (h == 0) return; int dir = h > 0 ? 1 : -1; cam.transform.position += transform.forward * dir * ZoomSpeed * Time.deltaTime * 20; } }
執行即可實現相機的移動縮放,旋轉。
想要原始碼的可以去這裡下載,只要1積分