

Программирование
+1Unity Character controller
Когда хожу по поверхности персонаж через время улетает за карту, что может быть не так?
Видео
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
{
[RequireComponent(typeof(CharacterController))]
public class PlayerMovement : MonoBehaviour
{
[SerializeField] private float _walkSpeed = 5;
[SerializeField] private float _runSpeed = 8;
[SerializeField] private float _rotateSpeed = 75;
[SerializeField] private float _jumpForce = 5;
[SerializeField] private float _gravity = -9.81f;
private CharacterController _characterController;
private Collider _playerCollider;
private Camera _playerCamera;
private Vector3 _velocity;
private Vector2 _rotation;
private Vector2 _direction;
private Joint _joint;
private Rigidbody _currentRigidbodyObject;
private Collider _currentColliderObject;
private void Start()
{
_characterController = GetComponent<CharacterController>();
_playerCollider = GetComponent<Collider>();
_playerCamera = GetComponentInChildren<Camera>();
_joint = GetComponentInChildren<Joint>();
Cursor.lockState = CursorLockMode.Locked;
}
private void Update()
{
_characterController.Move(_velocity * Time.deltaTime);
_direction = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
Vector2 mouseDelta = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y"));
if (_characterController.isGrounded) _velocity.y = Input.GetKeyDown(KeyCode.Space) ? _jumpForce : -0.1f;
else _velocity.y += _gravity * Time.deltaTime;
mouseDelta *= _rotateSpeed * Time.deltaTime;
_rotation.y += mouseDelta.x;
_rotation.x = Mathf.Clamp(_rotation.x - mouseDelta.y, -90, 90);
_playerCamera.transform.localEulerAngles = _rotation;
}
private void FixedUpdate()
{
_direction *= Input.GetKey(KeyCode.LeftShift) ? _runSpeed : _walkSpeed;
Vector3 move = Quaternion.Euler(0, _playerCamera.transform.eulerAngles.y, 0) * new Vector3(_direction.x, 0, _direction.y);
_velocity = new Vector3(move.x, _velocity.y, move.z);
}
}
}
По дате
По рейтингу
Что-то я не наблюдаю создания первоначального _velocity
Update() только ссылается на него
В FixedUpdate есть создание, new Vector3 но одним из параметров требует сам себя же.
Проблема может быть связана с неправильным расчетом или применением силы гравитации, из-за чего персонаж «вылетает» за пределы карты. Попробуйте проверить и корректно рассчитывать гравитацию и движение, особенно в `Update()` и `FixedUpdate()`, чтобы убедиться, что персонаж правильно остается на земле.