使用 lerp 移动和旋转在 Unity 中不会平滑变化

问题描述 投票:0回答:0

当我跟随的角色停止并继续移动时,我试图平稳地移动和旋转相机,我不明白为什么它会断断续续。我试图在更新中计算 _time 但它没有任何区别。

摄像机移动视频

相机移动代码:

using System.Collections;
using UnityEngine;
using static UnityEditor.PlayerSettings;
 
public class CameraMover : MonoBehaviour
{
    [SerializeField] private Vector3 _positionInShelter;
    [SerializeField] private Quaternion _rotationInShelter;
    [SerializeField] private GameObject _character;
    [SerializeField] private float _speed;
 
    private Quaternion _defaultRotation;
    private Vector3 _defaultPosition;
    private float _distanceX;
    private float _time;
 
    private void Awake()
    {
        _distanceX = _character.transform.position.x - transform.position.x;
        _defaultPosition = transform.position;
        _defaultRotation = transform.rotation;
    }
 
    private void Update()
    {
        transform.position = new(_character.transform.position.x - _distanceX, transform.position.y, transform.position.z);
    }
 
    private IEnumerator InShelterPosition(Vector3 position, Quaternion rotation)
    {
        _time = 0f;
        while (_time != 1f)
        {
            yield return new WaitForEndOfFrame();
            _time += Time.fixedDeltaTime;
            transform.position = Vector3.Lerp(transform.position, position, _time);
            transform.rotation = Quaternion.Lerp(transform.rotation, rotation, _speed * _time);
        }
    }
 
    public void CameraInShelterPosition()
    {
 
        StartCoroutine(InShelterPosition(_positionInShelter, _rotationInShelter));
    }
 
    public void CameraDefaultPosition()
    {
        StartCoroutine(InShelterPosition(_defaultPosition, _defaultRotation));
    }
}
c# unity3d
© www.soinside.com 2019 - 2024. All rights reserved.