Unity/C#FPS控制器出现奇怪故障

本文关键字:故障 C#FPS 控制器 Unity | 更新日期: 2023-09-27 18:20:08

我有一个奇怪的小故障,当我从一个角落走下来时(我没有按跳跃键),玩家会以非常快的速度摔倒。如果我跳下去,那么一切都会正常。(它的Quill18FPS控制器,我从那里学到了,所以这就是为什么我不使用内置控制器的原因)

using UnityEngine;
using System.Collections;    
[RequireComponent (typeof(CharacterController))]
public class FirstPersonController : MonoBehaviour
{
    public float movementSpeed = 5.0f;
    public float mouseSensitivity = 5.0f;
    public float jumpSpeed = 20.0f;
    float verticalRotation = 0;
    public float upDownRange = 60.0f;
    float verticalVelocity = 0;
    CharacterController characterController;
    // Use this for initialization
    void Start()
    {
//     Screen.lockCursor = true;
       characterController = GetComponent<CharacterController>();
    }
    // Update is called once per frame
    void Update() 
    {
       // Rotation
       float rotLeftRight = Input.GetAxis("Mouse X") * mouseSensitivity;
       transform.Rotate(0, rotLeftRight, 0);
       verticalRotation -= Input.GetAxis("Mouse Y") * mouseSensitivity;
       verticalRotation = Mathf.Clamp(verticalRotation, -upDownRange, upDownRange);
       Camera.main.transform.localRotation = Quaternion.Euler(verticalRotation, 0, 0);
       // Movement
       float forwardSpeed = Input.GetAxis("Vertical") * movementSpeed;
       float sideSpeed = Input.GetAxis("Horizontal") * movementSpeed;
       verticalVelocity += Physics.gravity.y * Time.deltaTime;
       if (characterController.isGrounded && Input.GetButton("Jump"))
       {
          verticalVelocity = jumpSpeed;
       }
       Vector3 speed = new Vector3(sideSpeed, verticalVelocity, forwardSpeed ;
       speed = transform.rotation * speed;
       characterController.Move(speed * Time.deltaTime);
    }
}

Unity/C#FPS控制器出现奇怪故障

问题是您运行此行的每一帧:

verticalVelocity+=物理.重力.y*时间.deltaTime;

因此,你每秒都在获得"动量",它永远不会停止,直到你跳起来,因为你正在将Y速度"重置"为正常值。我以前遇到过这个问题,只需在不接地的情况下增加Y速度就可以解决。你可以使用Raycast来检查你是否有地面,如果没有,则将verticalVelocity增加该数量。