WasTabon
@WasTabon

Как можно сделать столкновения в 2д, чтобы объекты не входили друг в друга?

Типо есть стена с коллайдером 2д и персонаж с коллайдером 2д и рижидбоди 2д, но когда персонаж идет в стену, то он в неё входит, потом как бы отпрыгивает и так по кругу, а как можно сделать так, чтобы он не проваливался в стену, а просто останавливался?
Вот скрипт движения если что
void Update()
    {

        if (Input.GetKeyDown(KeyCode.Space))
        {
            rigidbody2D.AddForce(transform.up * jumpForce, ForceMode2D.Impulse);
        }

        if (Input.GetKey(KeyCode.D))
        {
            transform.Translate(Vector2.right * Time.deltaTime * speed);
        }

        if (Input.GetKey(KeyCode.A))
        {
            transform.Translate(Vector2.left * Time.deltaTime * speed);
        }

    }
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
@DarkoreXOR
Метод transform.Translate перемещает объект игнорируя физический движок (вдавливая в стену), а после этого физический движок пытается что-то предпринять. Чтобы физика просчитывалась как нужно, следует использовать методы в rigidbody2D для толкания персонажа, как вы это делаете в случае пробела. И не стоит использовать вместе прямое перемещение через transform.Translate и физику твердых тел, иначе будете получать именно такие проблемы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
B-Erolskiy
@B-Erolskiy
Junior PHP Developer
Создать Physic Material в проекте с помощью Create -> PhysicMaterial, затем добавить коллайдеру в свойстве Material этот материал.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
mpulse Москва
от 80 000 до 140 000 ₽
от 110 000 до 180 000 ₽
Stark Games Минск
До 3 500 $
20 окт. 2020, в 22:57
5000 руб./за проект
20 окт. 2020, в 21:37
300000 руб./за проект
20 окт. 2020, в 21:18
500 руб./за проект