Столкновение по оси X означает 0 движение по оси Y
Я разрабатываю платформер в Unity, используя 2D движок. У меня есть персонаж игрока, у которого есть BoxCollider2D и RigidBody, и несколько "стен" с BoxColliders.
Теперь я скопировал скрипт для переноса плеера из другого проекта и внес некоторые изменения. Часть, связанная с движением, выглядит следующим образом:
public void FixedUpdate()
{
physVel = Vector2.zero;
// move left
if(Input.GetKey(KeyCode.LeftArrow))
{
physVel.x = -runVel;
}
// move right
if(Input.GetKey(KeyCode.RightArrow))
{
physVel.x = runVel;
}
// jump
if(Input.GetKey(KeyCode.UpArrow))
{
if(jumps < maxJumps)
{
jumps += 1;
if(jumps == 1)
{
_rigidbody.velocity = new Vector2(physVel.x, jumpVel);
}
}
}
//Apply gravity
_rigidbody.AddForce(-Vector3.up * fallVel);
// actually move the player
_rigidbody.velocity = new Vector2(physVel.x, _rigidbody.velocity.y);
}
Теперь это работает отлично.
Проблема возникает, если игрок прыгает в стену. Если после прыжка я продолжаю нажимать кнопку направления "к" стене, он будет подвешен в воздухе. Похоже, что при столкновении происходит уменьшение движения на обеих осях до нуля. Если я отпускаю направление, он падает нормально. Столкновения на другой оси работают нормально. Я могу ударить головой или ходить без проблем.
Я что-то упускаю из виду?
1 ответ
РЕДАКТИРОВАТЬ: попробуйте добавить материал с нулевым трением как к игроку, так и к стенам, и посмотрите, что произойдет, если он остановится, это ошибка трения.