у меня странный сбой, когда я спускаюсь с угла (я не нажимаю прыжок), игрок будет падать с очень быстрой скоростью. Если я прыгну, то все будет нормально. (Его контроллер Quill18 FPS, я узнаю оттуда, поэтому поэтому я не использую встроенный контроллер)
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);
}
}
Проблема в том, что каждый кадр, в котором выполняется эта строка:
verticalVelocity + = Physics.gravity.y * Time.deltaTime;
Таким образом, вы набираете "импульс" каждую секунду, и он не останавливается до тех пор, пока вы не прыгаете, потому что вы "перезагружаете" скорость Y до нормального значения. Раньше я сталкивался с этой проблемой, и ее можно устранить просто добавлением скорости Y, когда вы не заземлены. Вы можете использовать Raycast, чтобы проверить, есть ли у вас земля, а если нет, увеличьте verticalVelocity
на эту сумму.
verticalVelocity
, необходимая документация находится здесь, Raycast . Я надеюсь, что это поможет вам!