This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Obiekt kolizji może zawierać kilka osadzonych kształtów. W fizyce 3D mogą to być otoczki wypukłe i siatki trójkątów z plików glTF lub GLB. Możesz też używać zasobu mapy kafelków lub kształtu wypukłego przez właściwość Collision Shape obiektu kolizji.
Kształty podstawowe to box, sphere i capsule. Aby dodać kształt podstawowy, kliknij prawym przyciskiem myszy obiekt kolizji i wybierz Add Shape:

Kształt prostopadłościanu ma pozycję, obrót i wymiary: szerokość, wysokość oraz głębokość:

Kształt sfery ma pozycję, obrót i średnicę:

Kształt kapsuły ma pozycję, obrót, średnicę i wysokość:

Kształty kapsuły są obsługiwane tylko w fizyce 3D, skonfigurowanej w sekcji Physics pliku game.project.
Kształty złożone mogą korzystać z geometrii mapy kafelków lub danych otoczki wypukłej. Od wersji Defold 1.13.2 obiekty kolizji 3D mogą też tworzyć otoczki wypukłe i kształty siatek trójkątów z siatek w scenach glTF lub GLB.
Użyj kształtu Hull, aby uzyskać wypukłe przybliżenie siatki, lub kształtu Mesh, gdy kolizje mają odpowiadać jej trójkątom, w tym obszarom wklęsłym, takim jak otwory w geometrii poziomu.
3D w pliku game.project.Wybrana siatka dostarcza geometrię lokalną; transformacje węzłów glTF nie są stosowane. Kształty kolizji Mesh są obsługiwane przez backend Bullet 3D, zarówno dla statycznych, jak i niestatycznych obiektów kolizji. Backend fizyki 2D ich nie obsługuje.
Geometria siatki trójkątów jest dostępna tylko do odczytu przez API kształtów w czasie działania. Aby zmienić trójkąty, edytuj siatkę źródłową i ponownie zbuduj projekt. Informacje o skali obiektu gry znajdziesz w sekcji skalowanie kształtów kolizji.
Defold zawiera funkcję, która pozwala łatwo generować kształty fizyki dla źródła kafelków używanego przez mapę kafelków. W instrukcji Tile source wyjaśniono, jak dodawać grupy kolizji do źródła kafelków i przypisywać kafelki do grup kolizji (przykład).
Aby dodać kolizję do mapy kafelków:

Zwróć uwagę, że właściwość Group nie jest tutaj używana, ponieważ grupy kolizji są definiowane w źródle kafelków mapy.
W fizyce 3D możesz utworzyć otoczkę wypukłą bezpośrednio z siatki, korzystając z opisanego wyżej sposobu pracy w edytorze. Starszy zasób .convexshape jest nadal obsługiwany i można go utworzyć z punktów w zewnętrznym edytorze:
.convexshape przy użyciu zewnętrznego edytora.Format pliku convex hull używa tego samego formatu danych co pozostałe pliki Defold, czyli tekstowego formatu protobuf. Kształt convex hull definiuje punkty bryły. W fizyce 2D punkty powinny być podane w kolejności przeciwnej do ruchu wskazówek zegara. W trybie fizyki 3D używana jest abstrakcyjna chmura punktów. Przykład dla 2D:
shape_type: TYPE_HULL
data: 200.000
data: 100.000
data: 0.0
data: 400.000
data: 100.000
data: 0.0
data: 400.000
data: 300.000
data: 0.0
data: 200.000
data: 300.000
data: 0.0
Powyższy przykład definiuje cztery narożniki prostokąta:
200x300 400x300
4---------3
| |
| |
| |
| |
1---------2
200x100 400x100
Istnieje kilka narzędzi zewnętrznych, których można użyć do tworzenia kształtów kolizji:
Obiekt kolizji i jego kształty dziedziczą skalę obiektu gry. Aby wyłączyć to zachowanie, odznacz pole Allow Dynamic Transforms w sekcji Physics pliku game.project. Zwróć uwagę, że obsługiwane jest tylko skalowanie jednolite, a jeśli skala nie jest jednolita, użyta zostanie najmniejsza wartość skali.
Rozmiar kształtów podstawowych można zmieniać w czasie działania za pomocą physics.set_shape(). Ta funkcja nie zastępuje wierzchołków otoczki wypukłej ani geometrii siatki trójkątów. Przykład:
-- ustaw dane kształtu kapsuły
local capsule_data = {
type = physics.SHAPE_TYPE_CAPSULE,
diameter = 10,
height = 20,
}
physics.set_shape("#collisionobject", "my_capsule_shape", capsule_data)
-- ustaw dane kształtu sfery
local sphere_data = {
type = physics.SHAPE_TYPE_SPHERE,
diameter = 10,
}
physics.set_shape("#collisionobject", "my_sphere_shape", sphere_data)
-- ustaw dane kształtu prostopadłościanu
local box_data = {
type = physics.SHAPE_TYPE_BOX,
dimensions = vmath.vector3(10, 10, 5),
}
physics.set_shape("#collisionobject", "my_box_shape", box_data)
Na obiekcie kolizji musi już istnieć kształt właściwego typu o podanym id.
Kształty kolizji w fizyce 3D można obracać wokół wszystkich osi.
Kształty kolizji w fizyce 2D można obracać tylko wokół osi Z. Obracanie wokół osi X albo Y daje nieprawidłowe wyniki i należy go unikać, nawet przy obrocie o 180 stopni, który pozornie miałby tylko odwrócić kształt wzdłuż osi X albo Y. Do odwracania kształtu fizyki zaleca się używać physics.set_hlip(url, flip) oraz physics.set_vlip(url, flip).
Możesz włączyć debugowanie fizyki, aby zobaczyć kształty kolizji w czasie działania.