Unity第一人稱和第三人稱視角指令碼
阿新 • • 發佈:2019-01-09
Unity第一人稱和第三人稱視角
第一人稱視角
public class FirstView : MonoBehaviour { //要相機跟隨的GameObject public Transform m_target; //滑鼠敏度 public float mousesSensity = 10F; //上下最大視角(Y視角) public float minYLimit = -20F; public float maxYLimit = 80F; Vector3 m_camRotation; void Update() { //根據滑鼠的移動,獲取相機旋轉的角度 m_camRotation.x = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * mousesSensity; m_camRotation.y += Input.GetAxis("Mouse Y") * mousesSensity; //角度限制 m_camRotation.y = Mathf.Clamp(m_camRotation.y, minYLimit, maxYLimit); //相機角度隨著滑鼠旋轉 transform.localEulerAngles = new Vector3(-m_camRotation.y, m_camRotation.x, 0); transform.position = m_target.position; } void Start() { // Make the rigid body not change rotation if (rigidbody) rigidbody.freezeRotation = true; } }
使用方法:攝像機新增改指令碼 target:要相機跟隨的GameObject(主角Player) minYLimit方向最小視角
minXLimit方向最大視角
mousesSensity:水平方向和垂直方向滑鼠移動速度
第三人稱視角
using UnityEngine; using System.Collections; public class ThirdView : MonoBehaviour { public Transform target; public float distance = 10.0f; public float xSpeed = 250.0f; public float ySpeed = 120.0f; public float yMinLimit = -20.0f; public float yMaxLimit = 80.0f; private float x = 0.0f; private float y = 0.0f; // Use this for initialization void Start () { Vector3 angles = transform.eulerAngles; x = angles.y; y = angles.x; // Make the rigid body not change rotation if (rigidbody) rigidbody.freezeRotation = true; } void LateUpdate () { if (target) { x += Time.deltaTime * Input.GetAxis("Mouse X") * xSpeed; y -= Time.deltaTime * Input.GetAxis("Mouse Y") * ySpeed; y = ClampAngle(y, yMinLimit, yMaxLimit); // var rotation = Quaternion.EulerAngles(y * Mathf.Deg2Rad, x * Mathf.Deg2Rad, 0); var rotation=Quaternion.Euler(y,x,0); Vector3 vec = new Vector3(0.0f, 0.0f, -distance); var position = rotation * vec + target.position; transform.rotation = rotation; transform.position = position; } } static float ClampAngle ( float angle, float min , float max ) { if (angle < -360) angle += 360; if (angle > 360) angle -= 360; return Mathf.Clamp (angle, min, max); } // Update is called once per frame void Update () { } }
使用方法:攝像機新增改指令碼 target:要相機跟隨的GameObject(主角Player) distance:相機距離Tatget的距離(遠近鏡頭調整) yMinLimit:Y方向最小視角
yMaxLimit:Y方向最大視角
xSpeed:水平方向滑鼠移動速度
ySpeed:垂直方向滑鼠移動速度