Rozważ manipulowanie warstwami w czasie wykonywania.
Włączanie / wyłączanie kolizji dla niektórych obiektów z całymi warstwami
Physics.IgnoreCollision i Physics.IgnoreLayerCollision umożliwiają wyłączenie kolizji odpowiednio między dwoma zderzaczami i między dwiema warstwami.
Jeśli chcesz wykluczyć konkretny zderzacz z kolizji, nie ma wbudowanego sposobu, aby to zrobić. Jeśli używasz sztywnych obiektów nie kinematycznych z zderzaczami nie wyzwalającymi, zawsze będzie odpowiedź, nawet jeśli spróbujesz odfiltrować odpowiedzi według znacznika.
Sposób, w jaki osiągnęliśmy to w naszym projekcie, polegał na stworzeniu warstwy o nazwie „Void”. Pustka w ogóle się nie koliduje.
Teraz możesz tymczasowo wyłączyć kolizję zderzacza, ustawiając jego warstwę na „Void” i włącz ją ponownie, przywracając starą warstwę.
Oto sedno:
int oldLayer = -1;
int voidLayer;
void Start()
{
voidLayer = LayerMask.NameToLayer("Void");
}
void DisableCollider(Collider col)
{
oldLayer = col.gameObject.layer;
col.gameObject.layer = voidLayer;
}
void EnableCollider(Collider col)
{
col.gameObject.layer = oldLayer;
}
Zrobiliśmy to w szczególności, ponieważ włączanie i wyłączanie zderzaczy, które były dziećmi sztywnych nadwozi, może naprawdę popsuć pewne rzeczy w pewnych okolicznościach. Nie można więc niezawodnie wyłączyć części złożonego zderzaka sztywnego, ale można niezawodnie zamieniać warstwę jednej z części zderzaka złożonego.
Teraz twoja konkretna sytuacja
Aby zmniejszyć wpływ zderzenia zombie na twój samochód, zastanów się nad uruchomieniem kinematycznych zombie sztywnych nadwozi lub w inny sposób zmniejszeniem ich masy (np. Float.Epsilon), aby uderzenie nie miało wpływu na pęd samochodu. Przy uderzeniu możesz również dokonać zmiany warstwy, aby kolejne zderzenia nie były wywoływane, nawet jeśli pierwsza z nich przyłoży niewielką siłę do karoserii samochodu.
Możesz nawet zmienić je na warstwę, która po prostu nie koliduje z samochodem.
Możesz także umieścić kolejny zderzacz na zombie, które aktywują się po przejechaniu. W ten sposób możesz sfałszować siły uderzenia OnTriggerEnter. Nie możesz być z nim tak dokładny, ale możesz oszacować, gdzie normalne styki mogły być wystarczająco dobre, aby rzucić zombie gdzieś zabawnie.
Musisz zadać sobie pytanie:
Czy chcę mieć możliwość przewrócenia przejeżdżających zombie moim samochodem, czy powinny po prostu odtworzyć animację śmierci?
Czy obchodzi mnie, czy uderzenie zombie w mniejszy sposób wpływa na prędkość samochodu i prędkość kątową?
Zgaduję, że możesz sprawdzić nazwy obiektów lub dodać wartość nazwy do klas obiektów, a następnie to sprawdzić?
Następnie wystarczy mieć inną zmienną, której można użyć do sprawdzenia wzmocnienia i dodać ją do czeków.
EDYCJA: dodała tę zmienną do.
źródło
Zakładam, że używasz silnika fizyki do automatycznego wykonywania „odchylenia” na podstawie kształtu / masy, gdy rzeczy się zderzają? w takim przypadku zmień masę swoich zombie na bardzo minimalną wartość i nie wpłyną one na samochód.
źródło
Istnieją tutaj dwie klasy odpowiedzi:
Mam nadzieję że to pomoże!
źródło