第三人称相机处理

using UnityEngine;

public class FollowPlayer : MonoBehaviour
{
    private Transform player;
    private Vector3 offset;
    public float distance;

    void Start()
    {
        player = GameObject.FindGameObjectWithTag("Player").transform;
        offset = transform.position - player.position;
    }

    void Update()
    {
        transform.position = offset + player.position;
        //这两个方法的顺序不能调换
        RotateView();
        ScrollView();
    }
    /// <summary>
    /// 滚轮实现视野的放大和缩小
    /// </summary>
    void ScrollView()
    {
        //得到相机和人物的距离
        distance = offset.magnitude;
        //得到鼠标滚轮的滑动
        distance += -Input.GetAxis("Mouse ScrollWheel") * 10;
        distance = Mathf.Clamp(distance, 4, 20);
        //取得offset的单位向量,乘distance表示方向不变距离变成distance
        //normalized:把向量转为单位向量(方向不变,长度变为1)方便运算
        offset = offset.normalized * distance;
    }
    /// <summary>
    ///鼠标滑动实现相机围绕玩家旋转
    /// </summary>
    void RotateView()
    {
        //x得到鼠标水平方向的滑动
        float x = Input.GetAxis("Mouse X");
        transform.RotateAround(player.position, Vector3.up, x * 7);

        Vector3 Pos = transform.position;
        Quaternion r = transform.rotation;
        //y得到鼠标垂直方向的滑动
        float y = Input.GetAxis("Mouse Y");
        transform.RotateAround(player.position, -transform.right, y * 7);

        float c = transform.eulerAngles.x;
        if (c < 10 || c > 80)
        {
            transform.position = Pos;
            transform.rotation = r;
        }
        offset = transform.position - player.position;

    }
}

猜你喜欢

转载自blog.csdn.net/L_yijun/article/details/80153541
今日推荐