Unity第三人称视角分析

发表于2018-02-12
评论0 1.9k浏览
第三人称视角为常用视角之一,其大体实现方式为在每一帧里先将Camera的位置放在载体处,然后依据鼠标的移动反馈进行旋转,旋转结束之后使Camera沿自身z轴负方向移动一段距离,下一帧再次进行这个循环。代码如下:
using System.Collections;  
using System.Collections.Generic;  
using UnityEngine;  
public class ThirdPersonView_PlayerFollowMouse : MonoBehaviour {  
    //选择第三人称视角载体,也可以在void start里面用target=GameObject.Find("目标名称字符串")语句来锁定载体  
    public GameObject Player;  
    public float X_sensitivity = 10f;//镜头跟随鼠标x向移动灵敏度  
    public float Y_sensitivity = 10f;//镜头跟随鼠标y向移动灵敏度  
    public float MouseWheel_sensitivity = 5f;//镜头跟随鼠标滚轮灵敏度  
    public float MinX_rotation = 5F;//镜头绕自身x轴旋转角度,抬头极限,z轴正方向是模型运动的前方  
    public float MaxX_rotation = 80F;//镜头绕自身x轴旋转角度,低头极限  
    public float Distance = 2f;//设置镜头初始距离  
    float X_rotation = 0f;//镜头绕自身x轴旋转值  
    float Y_rotation = 0f;//镜头绕自身y轴旋转值  
    public float maxDistance = 10f;//镜头最大距离  
    public float minDistance = 0.5f;//镜头最小距离  
<span style="white-space:pre;"> </span>// Use this for initialization  
<span style="white-space:pre;"> </span>void Start () {}  
<span style="white-space:pre;"> </span>  
<span style="white-space:pre;"> </span>// Update is called once per frame  
<span style="white-space:pre;"> </span>void Update ()   
    {  
        //首先设置镜头位置与角色位置一致  
        transform.position = Player.transform.position;  
        //当按下鼠标右键时,镜头旋转   
        if (Input.GetMouseButton(1))  
        {  
            //绕自身y轴旋转值,等于镜头自身绕y轴旋转的欧拉角度加上鼠标横向移动反馈乘以灵敏度的值  
            Y_rotation = transform.localEulerAngles.y +Input.GetAxis("Mouse X") * X_sensitivity;  
            //绕自身x轴旋转值,等于自身的旋转值减去鼠标纵向移动反馈乘以灵敏度的值(此处的加还是减看需要,需要鼠标上划抬头,就是减,需要鼠标上划低头,就是加)  
            X_rotation -= Input.GetAxis("Mouse Y") * Y_sensitivity;  
            //将绕自身X轴旋转值限制在一定的范围之间  
            X_rotation = Mathf.Clamp(X_rotation, MinX_rotation, MaxX_rotation);  
            //完成角度随鼠标移动旋转  
            transform.localEulerAngles = new Vector3(X_rotation, Y_rotation, 0);  
        }  
        setdistance();//调用方法使镜头向自身后方移动一定距离与player拉开距离(注:沿自身z轴向z轴负方向移动,对于任何gameobject,其正方向都是z轴正方向)  
<span style="white-space:pre;"> </span>}  
    void setdistance()//方法(函数),用于设置镜头与角色距离  
    {  
        if (Distance >= minDistance && Distance <= maxDistance)//如果距离数据在最大距离和最小距离之间  
        {  
            //距离等于自身减去鼠标滚轮反馈乘以灵敏度的值(此处加与减同样根据需求来定)  
            Distance -= Input.GetAxis("Mouse ScrollWheel")*MouseWheel_sensitivity;  
        }  
        else if (Distance < minDistance)//若距离数据小于最小值,则等于最小值  
        {  
            Distance = minDistance;  
        }  
        else if (Distance > maxDistance)//若距离数据大于最小值,则等于最大值  
        {  
            Distance = maxDistance;  
        }  
        //完成镜头距离设置  
        transform.Translate(Vector3.back * Distance );  
    }  
}  

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引