#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);
б) Возможно, вы также захотите проверить настройки своего жесткого тела, точнее, режимы обнаружения столкновений. если бы вы использовали быстро движущиеся игровые объекты, вам понадобился бы непрерывный режим обнаружения столкновений вместо дискретного.