Земля - Ground. Также есть бокс коллайдер 2д.
Когда игрок доходит до края земли - от застревает. Аналогично и с другого края.
На игрока и землю поместил материал с friction = 0. Не помогло.
По земле ходит - прыгает прекрасно, только доходит до края - застревает. Так происходит на любой "земле" - делал копии объектов.
Убирал стены - дело не в них, застревает именно в земле.
https://youtu.be/pPFL7-xSlGs
Код передвижения игрока
Синтаксис:
Используется csharp
void FixedUpdate()
{
isGrounded = Physics2D.OverlapCircle(groundCheck.position, checkRadius, whatIsGround);
// Передвижение игрока.
float movement = Input.GetAxis("Horizontal");
// Передвижение и прыжок возможны только когда игрок на земле (отключаем управление в полете).
if (isGrounded==true)
{
// Передвижение.
if (isJumping==false)
{
transform.position += new Vector3(movement, 0, 0) * speed * Time.deltaTime;
if (movement < 0) sr.flipX = true;
if (movement > 0) sr.flipX = false;
}
// Прыжок с накоплением высоты прыжка, в зависимости от длительности удержания пробела.
if (isJumping==true)
{
currentJumpHeight+=jumpHeightIncrement;
if (currentJumpHeight>=maxJumpHeight) jumpNow=true;
}
}
}
// Сразу останавливаем игрока после приземления на землю (объект с тегом Ground).
// Без этого кода игрок будет некоторое время двигаться по инерции.
void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.tag == "Ground")
{
rb.velocity = Vector2.zero;
}
}
{
isGrounded = Physics2D.OverlapCircle(groundCheck.position, checkRadius, whatIsGround);
// Передвижение игрока.
float movement = Input.GetAxis("Horizontal");
// Передвижение и прыжок возможны только когда игрок на земле (отключаем управление в полете).
if (isGrounded==true)
{
// Передвижение.
if (isJumping==false)
{
transform.position += new Vector3(movement, 0, 0) * speed * Time.deltaTime;
if (movement < 0) sr.flipX = true;
if (movement > 0) sr.flipX = false;
}
// Прыжок с накоплением высоты прыжка, в зависимости от длительности удержания пробела.
if (isJumping==true)
{
currentJumpHeight+=jumpHeightIncrement;
if (currentJumpHeight>=maxJumpHeight) jumpNow=true;
}
}
}
// Сразу останавливаем игрока после приземления на землю (объект с тегом Ground).
// Без этого кода игрок будет некоторое время двигаться по инерции.
void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.tag == "Ground")
{
rb.velocity = Vector2.zero;
}
}