Unity 1019.3, physics nie dziala mi layer


#1

mam taki o kod niestety cały czas zwracana lista jest pusta, próbowałem z innym layer (wszystkie włącznie z 0) ale efekt taki sam.

Collider[] cos = Physics.OverlapBox(gameObject.transform.position, new Vector3(3, 3, 3), gameObject.transform.rotation, 11);
if (cos.Length != 0)
{
foreach (Collider c in cos)
Debug.Log("collider " + c.gameObject.name);
}
else
{
Debug.Log("overlap pusto ");
}
debugowalem pozycje i bankowo sie zgadza.
obraz
a tak wyglada siatka
obraz


#2

daj przed tą linią debug i sprawdź co zwraca cos


#3

przed
if (cos.Length != 0)
jest debug robiacy ten czerwony kwadrat z rysunku, wiec kod do tego momentu dziala.

nie dziala mi ani overlap ani check , dla zadnego layer, gdy pomine ten parametr wszystko działa jak powinno. sprawdzalem dla layer = 0 i tak samo nie dziala :*, wyglada na to ze znowu cos w edytorze zepsułem nie wiem tylko co.


#4

maskę warstwy masz ustawioną na 11 co jest na tej warstwie?


#5

cokolwiek by to nie bylo i tak powinno sprawdzac kolizcje ze wszystkim :l ,
napisałem kod nie chciał mi działać zaczełem debugować a co za tym idzie zmienilem siatke kolizji na wszystko ze wszystkim,
obraz


#6

podany przez Ciebie kod jest uruchomiony w funkcji pętli gry (Update lub FixedUpdate)? i czy nachodzący na sześcian obiekt ma dodany swój collider?


#7

fiedupdate
to tak
ten czerwony szescian to Debug.DrawLine(/debug linie nie pamietam jak sie dokladnie funkcja nazywala)
jest on dokladnie taki sam i w tym samym miejscu co próbuje pobrać collidery[] z Physics.Overlap
potem są collidery z otoczenia layer=StaticObjects , oraz zielona kapsuła=SelfEntity, białe kółko to kolejny debug)
(gdy kod który napisałem mi nie działał zaczełem debugować efekt tego to wlasnie ten ogromny sześcian (który jest obszarem Overlap, oraz to ze siatka kolizji została ustawiona na wszystko ze wszystkim)
z tego co mi wyszlo kod dziala poprawnie GDY nie ustawie layer w parametrach funkcji :l


#8

Cytat Collider[] cos = Physics.OverlapBox(gameObject.transform.position, new Vector3(3, 3, 3), gameObject.transform.rotation, 11);

Layery ustawia się przesunięciem bitowym 1<<11 (11 layer uaktywniony).


#9

gdy nie ustawisz layer w parametrach funkcji unity domyślnie bierze pod uwagę wszystkie warstwy więc coś nie tak z nr warstwy którą tam podajesz, pewnie problem w tym co powyżej Merjoz pisze


#10

haha faktycznie, a ja się głupio zastanawiałem skąd limit 32 warstw skoro int moze zapisać znacznie większą liczbę, bardzo fajna opcja, zaoszczędza kodu.
Może jeszcze się orientujesz czy kolizja każdej z warstw (o ile nie są zaznaczone) jest liczona na oddzielnych zbiorach ? czy aby mieć 2 równoległe obliczania fizyki potrzeba 2 PhysicScene ?
wielkie dzięki,


#11

Z PhysicScene na razie się nie zapoznawałem.