1. 程式人生 > >Unity第一人稱和第三人稱視角指令碼

Unity第一人稱和第三人稱視角指令碼

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:垂直方向滑鼠移動速度