Я работаю над игрой на 2D-платформе и понял, что, например, функция прыжка игрока не всегда работает одинаково. Высота прыжка различна, если игрок прыгает во время движения / бега или если игрок прыгает без движения.
У меня есть две отдельные функции Move () и Jump (), Move () использует transform.Translate для перемещения игрока, а Jump () использует hardBody.AddForce () для прыжка игрока. Я уже пытался изменить функцию Move () плеера, чтобы использовать жесткие тела, чтобы заставить игрока двигаться вместо использования transform.Translate (). И это не сработало.
Я также пытался заставить игрока прыгать, используя transform.Translate, который решил проблему непостоянной высоты прыжка, но игрок просто телепортировался вместо прыжка
это представление моей структуры кода, а не фактический код, потому что фактический код похож на 600 строк
public class Player
{
float JumpSpeed;
bool isGrounded;
void Update()
{
if (Input.GetKey(KeyCode.A))
Move(Directions.Left);
if (Input.GetKey(KeyCode.D))
Move(Directions.Right);
if (Input.GetKeyDown(KeyCode.Space))
Jump(JumpSpeed);
}
public void Move(Directions dir)
{
Vector2 speed;
//figure out speed and etc...
//makes the player move in the right direction and speed
transform.Translate(speed * Time.deltaTime);
}
public void Jump(float speed)
{
if(isGrounded)
rigidBody.AddForce(new Vector2(0, speed * Time.deltaTime), ForceMode2D.Impulse);
}
}