Персонаж проходит внутри наклонной стены при движении

#c# #unity3d #game-physics

Вопрос:

Я пишу сценарий контроллера персонажа и реализовал перемещение, изменив жесткое тело.положение, и когда мой персонаж пытается продвинуться ближе к стене, он немного падает в наклонную стену и пол.Персонаж уже в другом коллайдере ( я держал стрелку вправо)

Я пытаюсь сделать бросок и проверить, столкнется ли коллайдер игрока , если он двинется, но я думаю, что это плохо решит мои проблемы, потому что это создаст проблемы, если я захочу переместить предмет по телу персонажа и т. Д.

Я думаю, что это возможно с настройкой unity rigidbody или небольшим количеством кода

Мой код передвижения:

 public void Move(Vector2 direction)
{
    Vector2 directionAlongSurface = _surfaceSlider.GetDirection(direction.normalized); // It get direction if player try walk on a slope (forward - Vector2.Dot(forward, _normal) * _normal;)
    Vector2 offset = directionAlongSurface * (_speed * Time.deltaTime);
    //var colliders = Physics2D.BoxCastAll(_boxCollider.transform.position, _boxCollider.size, 90, offset, offset.magnitude,_layerMask);
    //if(colliders.Length == 0) // 
    _rigidbody.position  = offset;
}

 

P. S Характерный коллайдер немного проникает внутрь даже в плоскую стену

Комментарии:

1. В 3D-сцене мы обычно добавляем коллайдер с жестким телом и сеткой (другие типы коллайдеров также работают) на персонажа, и мы одновременно добавляем различные типы коллайдеров (в зависимости от формы цели и эффективности) на другие объекты сцены, такие как земля или стена. Тогда мы просто легко позволим Unity обрабатывать столкновения и другие физические эффекты. Я бы хотел, чтобы это вам помогло.

Ответ №1:

а) В вашем коде движения вы перемещаете тело Жесткости _rigidbody.position = offset; . Это неправильный способ перемещения физического объекта. попробуйте вместо этого,

 rigidbody.MovePosition(rigidbody.position   offset);
 

б) Возможно, вы также захотите проверить настройки своего жесткого тела, точнее, режимы обнаружения столкновений. если бы вы использовали быстро движущиеся игровые объекты, вам понадобился бы непрерывный режим обнаружения столкновений вместо дискретного.