2016-08-16 1 views
2

Я делаю 2D Brick Breaker в Unity.Unity Brick Breaker: мяч ударяется между двумя кирпичами

У меня проблема со сценарием, когда мяч попадает между двумя кирпичами. У меня есть BoxCollider2D, прикрепленный ко всем кирпичам и CircleCollider2D, прикрепленный к мячу. Когда мяч попадает между 2 соседними кирпичами, он отскакивает назад в том же направлении, как если бы он попал в край кирпича. Между ними нет края, но два соседних кирпича образуют сплошную поверхность. Таким образом, мяч должен отскакивать от поверхности (в другом направлении) вместо отскока назад.

enter image description here

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

Спасибо, Мукул

+1

Вы можете использовать одну геометрию окна, но разные текстуры, чтобы издеваться над ней как с двумя блоками. – David

+0

Не могу сделать это. Я обнаруживаю коллизии индивидуально для каждого блока, основываясь на его геометрии окна. – mukul

+0

Можете ли вы объединить выровненные полевые коллайдеры во время выполнения? – TheDjentleman

ответ

0

Я предполагаю, что это может быть проблема:

Когда мяч бьет кирпичи с сильной силой, Существует шанс, что это может переместить один из кирпичей по очень небольшое расстояние, даже если масса кирпича намного тяжелее.

Это движение может вызвать неровную поверхность, поэтому мяч отскакивает назад в том же направлении.

Попробуйте добавить компонент Rigidbody на каждый кирпич (если вы еще этого не сделали) и установите для его isKinematic значение true.

Дайте мне знать, если это решит проблему.

+0

Если в кирпич не включен компонент Rigidbody, он не будет двигаться в любом случае. Кроме того, добавление Rigidbody и установка isKinematic в true, не сработало. – mukul

0

Способ 1:

Используйте один ящик коллайдер для стены, но не для каждого отдельного кирпича. Это исправит вашу проблему +, оптимизирует ваш проект.

Способ 2:

Вы должны построить стену programmaly и коллайдеров в этом случае должны быть без пробелов между ними. Это должно решить проблему.

Way 3:

Сделайте свою собственную логику удара стены.

OnColliderEnter вам нужно получить скорость шариков. OnColliderEnd вам нужно установить скорость вручную.

+0

Мне нужен коллайдер для каждого кирпича, потому что я проверяю столкновения для каждого блока. Например. если шар сталкивается с кирпичом (т. е. коллайдер шара сталкивается с коллайдером из кирпича), то я разбиваю кирпич. – mukul

+0

обновленное решение – Andrew

+0

Я попытаюсь вручную изменить скорость шара после столкновения. Я дам вам знать, если это сработает. – mukul