Делал управление персонажем в Unity. Все работает отлично, кроме прыжка, а именно прыжок возможен только при перемещении персонажа. Есть две вызываемые функции - одна отвечает за перемещение(Movement), вторая за прыжок(Velocity). Опытным путем понял, что они конфликтуют,
spoilerпри удалении функции Movement из Update прыжок отлично срабатывает, но персонажем, естественно, управлять не получится.
но в чем именно дело понять не могу. Объясните, в чем беда.
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.InputSystem;
public class PlayerContoller : MonoBehaviour
{
[SerializeField] private CharacterController _characterController;
[SerializeField] private Transform _cameraTransform;
[Header("Settings")]
[SerializeField] private float _gravity = -14f;
[SerializeField] private float _speed = 4f;
[SerializeField] private float _jumpHeight = 1f;
[Range(1, 100)]
[SerializeField] private float _sensitivity = 50f;
float rotationX;
Vector3 velocity;
Vector3 move;
void Start()
{
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
}
void Update()
{
Rotate();
Movement();
Velocity();
}
private void Rotate()
{
float mouseX = Input.GetAxis("Mouse X") * _sensitivity * Time.deltaTime;
float mouseY = Input.GetAxis("Mouse Y") * _sensitivity * Time.deltaTime;
rotationX -= mouseY;
rotationX = Mathf.Clamp(rotationX, -90f, 90f);
_cameraTransform.localRotation = Quaternion.Euler(rotationX, 0, 0);
transform.Rotate(Vector3.up * mouseX);
}
private void Velocity()
{
if (_characterController.isGrounded && velocity.y < 0)
velocity.y = -2f;
velocity.y += Time.deltaTime * _gravity;
if (Input.GetKeyDown(KeyCode.Space) && _characterController.isGrounded)
velocity.y = Mathf.Sqrt(_jumpHeight * -2f * _gravity);
_characterController.Move(velocity * Time.deltaTime);
}
private void Movement()
{
float moveX = Input.GetAxis("Horizontal");
float moveY = Input.GetAxis("Vertical");
move = transform.forward * moveY + transform.right * moveX;
_characterController.Move(move * _speed * Time.deltaTime);
}
}