基於Unity3D的相機功能的實現(三)——第一人稱相機(FPS)
阿新 • • 發佈:2019-01-02
在遊戲開發中,角色視野跟隨滑鼠位置即第一人稱相機(FPS)是一個很常見的需求,我們今天來實現該功能。
掛載到相機上即可,程式碼如下:
using UnityEngine; using System.Collections; //旋轉軸 public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 } public class MouseLook : MonoBehaviour { //x軸(水平)速度 public float sensitivityX = 15F; //y軸(垂直)速度 public float sensitivityY = 15F; //x軸(水平)最小旋轉值 public float minimumX = -360F; //x軸(水平)最大旋轉值 public float maximumX = 360F; //y軸(垂直)最小旋轉值 public float minimumY = -60F; //y軸(垂直)最大旋轉值 public float maximumY = 60F; //旋轉軸 public RotationAxes axes = RotationAxes.MouseXAndY; private float rotationY = 0F; void Update () { if (axes == RotationAxes.MouseXAndY) { float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX; rotationY += Input.GetAxis("Mouse Y") * sensitivityY; rotationY = Mathf.Clamp (rotationY, minimumY, maximumY); transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0); } else if (axes == RotationAxes.MouseX) { transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityX, 0); } else if (axes == RotationAxes.MouseY) { rotationY += Input.GetAxis("Mouse Y") * sensitivityY; rotationY = Mathf.Clamp (rotationY, minimumY, maximumY); transform.localEulerAngles = new Vector3(-rotationY, transform.localEulerAngles.y, 0); } } void Start () { // 確保剛體不改變選轉 if (GetComponent<Rigidbody>()) GetComponent<Rigidbody>().freezeRotation = true; } }