Как убрать трение в Unity2D?
Чтобы убрать трение при столкновении со стенами я добавлял колайдеру персонажа физический материал и в нём убирал Friction на 0, но из-за отсутсвия трение персонаж начинал скользить по поверхности земли после остановки движения. А если Friction на 1, то сколькожение пропадало, но персанаж растревает при контакте со стенами. Читал на форумах, что скольжение происходит из-за перемещения персонажа через Transform и нужно делать через velocity, но почему-то у меня это не сработало.
Условие для движения персонажа.
if (_joystick.Horizontal != 0 && !_isAttacking && _health > 0)
{
_rigidbody.velocity = new Vector2(_joystick.Horizontal * _speed, _rigidbody.velocity.y);
_effect.SetActive(true);
_animator.SetInteger("StateSwordsman", 2);
}
Ответы (2 шт):
Можно попробовать сделать два коллайдера, на верхний наложить физический материал(в нем все на 0) и нижний оставить как есть и ничего в него не добавлять. Таким образом персонаж не будет прилипать к стенам, благодаря верхнему коллайдера, и скользить не будет так как в низу коллайдер совершенно другой. 
Попробую Вам объяснить. Делайте по пунктам.
Создайте 2 Physics Material 2D:
- назовите первый no_Friction и настройки Friction = 0; Bounciness = 0.
- назовите второй full_Friction и настройки Friction = 100; Bounciness = 0.
В своём скрипте создайте две ссылки на материалы:
public PhysicsMaterial2D noFriction; public PhysicsMaterial2D fullFriction;В этом же скрипте создайте метод:
public void SetFriction() { if(здесь условие, в котором ваше ускорение равно == 0) { _rigidbody.sharedMaterial = fullFriction; } else { _rigidbody.sharedMaterial = noFriction; } }Поместите метод SetFriction() в метод Update() для проверки(далее зависит от структуры кода). Сохраните скрипт => идите в Unity.
В инспекторе, в полученном скрипте у вас появилось два новых поля noFriction и fullFriction. Поместите в них ваши материалы из ПУНКТА №1(выше) соответственно.
Запускайте.
По факту скрипт заменяет материалы в момент, когда ваше ускорение либо = 0, либо != 0