(как правило) лучшим решением является использование слоев для управления коллизиями между категориями элементов.Вы должны назначить помеченные obj
объекты определенному слою, а объект в вашем посте - другому слою, а затем перейти в Unity Physics Manager, чтобы отключить столкновение между этими слоями.Дальнейшее руководство по этому вопросу доступно в Unity Docs .
Но если вам необходимо использовать теги, решение все еще есть.
Если вы звоните Physics2D.IgnoreCollision
внутри события столкновения вы игнорируете только их столкновение после событие столкновения повлияло на скорость и т. д. объектов.Итак, в основном вы вызываете это слишком поздно.
Лучшая альтернатива для получения искомого поведения - вызывать его в методе, который запускается после создания обоих объектов.Проблема в том, что вам нужен способ получить ссылку на другой игровой объект, который вы хотите игнорировать.
Одно из решений - поместить вызов в объекты в их методах OnEnable (), а затем использоватьFindGameObjectsWithTag
чтобы найти другие объекты для игнорирования:
public class OneObject : MonoBehaviour {
void OnEnable() {
GameObject[] otherObjects = GameObject.FindGameObjectsWithTag("obj");
foreach (GameObject obj in otherObjects) {
Physics2D.IgnoreCollision(obj.GetComponent<Collider2D>(), GetComponent<Collider2D>());
}
// rest of OnEnable
}
// rest of class ...
}
Если вы поместите это в OnEnable
обоих типов объектов (с тегом другого объекта, конечно), оно должно соответствоватьтвои нужды.