Unity第三人称游戏摄像机跟随

2022-02-26  本文已影响0人  再改一个名

第一种 跟随玩家位置 镜头无法旋转

摄像机初始位置与玩家位置需要提前手动设置


image.png

如果相机没有提前设置好 则game界面不能正确看到对象

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraMove : MonoBehaviour
{
    private Transform _playerTransform;
    private Vector3 _offset;
    // Start is called before the first frame update
    void Start()
    {
        _playerTransform = GameObject.FindWithTag("Player").transform;
        _offset = _playerTransform.position - transform.position;
    }

    // Update is called once per frame
    void LateUpdate()
    {
        transform.position = _playerTransform.position - _offset;

    }
}

第二种

这一种方式 让摄像机自动寻找玩家 然后旋转镜头对准玩家
镜头旋转的速度和相机跟随的速度影响 用户的体验


image.png
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraMove : MonoBehaviour
{
    private Transform _playerTransform;
    private Vector3 _offset = new Vector3(0, 5, -4); // 相机相对于玩家的位置
    private Vector3 _pos;// 相机相对于世界的位置
    private float _speedRotate = 20;// 相机旋转的速度
    private float _speedMove = 20;// 相机移动的速度
    // Start is called before the first frame update
    void Start()
    {
        _playerTransform = GameObject.FindWithTag("Player").transform;

    }

    // Update is called once per frame
    void LateUpdate()
    {
        _pos = _playerTransform.position + _offset;

        // 位移相机
        this.transform.position = Vector3.Lerp(this.transform.position, _pos, _speedMove * Time.deltaTime);

        // 得到旋转镜头的四元素
        Quaternion angel = Quaternion.LookRotation(_playerTransform.position - this.transform.position);

        // 旋转相机
        this.transform.rotation = Quaternion.Slerp(this.transform.rotation, angel, _speedRotate * Time.deltaTime);
    }
}

上一篇下一篇

猜你喜欢

热点阅读