Как предотвратить "прилипание" Rigidbody к коллайдеру объектов в Unity?

Рейтинг: 0Ответов: 1Опубликовано: 21.05.2023

Если прыгнуть на стену и продолжать кнопку движения - персонаж прилипает к стене и не соскальзывает. Пробовал играться с гравитацией, но не привело ни к чему адекватному. Персонаж на картинке прилипает к стене

Как можно решить эту проблему, чтобы персонаж всегда подвергался притяжению?

[SerializeField] private float moveSpeed = 7f;
[SerializeField] private float jumpForce = 14f;


private float movX = 0f;

private void Start()
{
    rb = GetComponent<Rigidbody2D>();
    anim = GetComponent <Animator>();
    sr = GetComponent<SpriteRenderer>();
    capcoll = GetComponent<CapsuleCollider2D>();
}


// Update is called once per frame
private void FixedUpdate()
{

    movX = Input.GetAxis("Horizontal");
    float movY = Input.GetAxis("Vertical");
    rb.velocity = new Vector2(movX * moveSpeed, rb.velocity.y);

    if (isGrounded() && Input.GetButtonDown("Jump"))
        {
            rb.velocity = new Vector2(rb.velocity.x, jumpForce);
        }


 }

Ответы

▲ 0

у тебя здесь потенциально 2 проблемы:

  1. у тебя постоянная скорость толкающая на ступеньку с постоянной силой. Вполне возможно что использование AddForce частично поправит ситуацию.

  2. А самый корень проблемы в том как ты добываешь isGrounded. Если бы ты прочел статью полностью на которую я сослался ru.stackoverflow.com/q/936026/186752 то ты бы увидел тамошнюю реализацию isGrounded более хорошего порядка

Здесь ты дотрагиваешся к ступеньке которая является и полом одновременно поэтому флаг isGrounded() срабатывает и изменение велосити применяется.

Если бы ты проверял isGrounded() только под персонажем (как было показано внутри статьи ближе к концу) - у тебя бы не зашло внутрь ифа и прыжок бы не сработал повторно и персонаж бы упал.

PS: и все равно по скриншоту не видно что у тебя капсуль коллайдер

PS2: То есть проблема все равно в том что описано в той статье и ты не применил всю информацию там поданую на практике. Перечитай статью заново.

PS3: И то есть проблема в том месте которое ты не запостил в вопросе :) Акуратнее создавай вопросы)