unity fps 相机
![](https://img2018.cnblogs.com/blog/1649033/201907/1649033-20190704093808105-1534307627.png)
using System; using System.Collections; using System.Collections.Generic; using UnityEngine; //旋转轴 public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 } public class CabeMove : MonoBehaviour { CameraOnMove cameraOnMove; Transform transform_Image; Vector3 last_Camera_Po; Vector3 now_Camera_Po; Vector3 difference_Value; float x; float y; // Start is called before the first frame update void Start() { if(cameraOnMove == null) { cameraOnMove = new CameraOnMove(); } if(transform_Image == null) { transform_Image = GetComponentsInChildren<Transform>()[2]; } last_Camera_Po = Vector3.zero; now_Camera_Po = Vector3.zero; difference_Value = Vector3.zero; x = 0; y = 0; } // Update is called once per frame void Update() { OnMove(); CameraMove(); BulBul(); } private void BulBul() { if (Input.GetKeyDown(KeyCode.J)) { GameObject bullet = GameObject.CreatePrimitive(PrimitiveType.Sphere); bullet.transform.position = transform.position; bullet.transform.LookAt(transform_Image); bullet.AddComponent<BulletsFly>(); } } private void OnMove() { x = Input.GetAxis("Horizontal"); y = Input.GetAxis("Vertical"); transform.Translate(Vector3.forward * y * Time.deltaTime); transform.Translate(Vector3.left * -x * Time.deltaTime); } public void CameraMove() { if (Input.GetMouseButton(0)) { now_Camera_Po = Input.mousePosition; if (!Input.GetMouseButtonDown(0)) { difference_Value = now_Camera_Po - last_Camera_Po; if(difference_Value != Vector3.zero) cameraOnMove.CameraMove(transform, difference_Value.x/30, difference_Value.y/30); } last_Camera_Po = now_Camera_Po; } } } public class CameraOnMove { //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; public void CameraMove(Transform transform, float x, float y) { if (axes == RotationAxes.MouseXAndY) { float rotationX = transform.localEulerAngles.y + x * sensitivityX; rotationY += y * sensitivityY; rotationY = Mathf.Clamp(rotationY, minimumY, maximumY); transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0); } else if (axes == RotationAxes.MouseX) { transform.Rotate(0, x * sensitivityX, 0); } else if (axes == RotationAxes.MouseY) { rotationY += y * sensitivityY; rotationY = Mathf.Clamp(rotationY, minimumY, maximumY); transform.localEulerAngles = new Vector3(-rotationY, transform.localEulerAngles.y, 0); } } } public class BulletsFly : MonoBehaviour { private void Update() { transform.Translate(Vector3.forward * 3 * Time.deltaTime); } }