Unity中添加飞行摄像机游戏功能,同时解决飞机相机掉落时lag问题

嘿,亲,我已经将一个苍蝇添加到我的游戏中 (当玩家死亡时,代替简单的Pov从其他玩家视角,我发现更好的是玩游戏一只Invincible苍蝇,它可以无能为力,只是飞行)

不管怎样,我已经将电影院摄像头添加了进去,但我遇到的奇怪延迟问题 :/

您是否有想法解决这个问题?感谢!

----- 以下为代码 ---

using UnityEngine;

[RequireComponent(typeof(Rigidbody))]
public class Mouche : MonoBehaviour
{
    [SerializeField] private Transform enfantTransform;
    [SerializeField] private Transform cameraTransform;

    [Header("Paramètres de déplacement")]
    public float vitesseDeplacement = 5f;

    [Header("Paramètres de caméra")]
    private float mouseSensitivity = 110f;
    public float MouseSensitivity { get => mouseSensitivity; set => mouseSensitivity = value; }
    public float limiteRotationCamera = 80f;
    public float vitesseLissageRotation = 15f;

    [Header("Paramètres d'inclinaison (Enfant)")]
    public float inclinaisonMaxZ = 20f;
    public float inclinaisonMaxX = 20f;
    public float vitesseInclinaison = 5f;

    private Rigidbody rb;
    private Vector3 directionVisee; // On stocke la direction pour FixedUpdate
    private float rotationX = 0f;
    private float rotationY = 0f;
    private float rotationXLisse = 0f;
    private float rotationYLisse = 0f;

    private void Start()
    {
        transform.localScale = Vector3.one;
        rb = GetComponent<Rigidbody>();
        rotationY = transform.eulerAngles.y;
        rotationYLisse = rotationY;
        Cursor.lockState = CursorLockMode.Locked;
    }

    private void Update()
    {
        // --- 1. Gestion de la vision (Souris) ---
        float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
        float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;

        rotationY += mouseX;
        rotationX -= mouseY; // Inversion du mouvement vertical (look inverse)
        rotationX = Mathf.Clamp(rotationX, -limiteRotationCamera, limiteRotationCamera);

        // --- Lissage de la rotation ---
        rotationXLisse = Mathf.Lerp(rotationXLisse, rotationX, Time.deltaTime * vitesseLissageRotation);
        rotationYLisse = Mathf.LerpAngle(rotationYLisse, rotationY, Time.deltaTime * vitesseLissageRotation);

        // Appliquer la rotation verticale (Pitch) sur la caméra
        if (cameraTransform != null)
        {
            cameraTransform.localEulerAngles = new Vector3(rotationXLisse, 0f, 0f);
        }

        // --- 2. Gestion des Inputs de déplacement ---
        float inputHorizontal = Input.GetAxisRaw("Horizontal");
        float inputVertical = Input.GetAxisRaw("Vertical");

        // Calculer l'avant/droite avec la rotation courante lissée
        Quaternion currentRot = Quaternion.Euler(0f, rotationYLisse, 0f);
        Vector3 directionAvant = currentRot * Vector3.forward;
        Vector3 directionDroite = currentRot * Vector3.right;

        directionVisee = (directionAvant * inputVertical + directionDroite * inputHorizontal).normalized;

        if (Input.GetKey(KeyCode.Space)) directionVisee += Vector3.up;
        if (Input.GetKey(KeyCode.LeftShift)) directionVisee -= Vector3.up;

        // --- 3. Inclinaison de l'enfant (X et Z) - Purement visuel ---
        if (enfantTransform != null)
        {
            float targetZ = -inputHorizontal * inclinaisonMaxZ;
            float targetX = inputVertical * inclinaisonMaxX;

            Vector3 currentEuler = enfantTransform.localEulerAngles;
            float smoothZ = Mathf.LerpAngle(currentEuler.z, targetZ, Time.deltaTime * vitesseInclinaison);
            float smoothX = Mathf.LerpAngle(currentEuler.x, targetX, Time.deltaTime * vitesseInclinaison);

            enfantTransform.localEulerAngles = new Vector3(smoothX, currentEuler.y, smoothZ);
        }
    }

    private void FixedUpdate()
    {
        rb.linearVelocity = directionVisee.normalized * vitesseDeplacement;
        rb.MoveRotation(Quaternion.Euler(rotationXLisse, rotationYLisse, 0f)); // Rotation de la mouche
    }
}