Read this manual in English
Obiekty kolizji
Obiekty kolizji (ang. collision object) w Defoldzie to, wbrew nazwie, komponenty, które nadają obiektowi gry zachowanie fizyczne i pozwalają być analizowane przez silnik fizyki gry. Obiekt kolizji ma właściwości fizyczne, takie jak masa, współczynnik restytucji (uderzenia) i współczynnik tarcia, a jego rozszerzenie przestrzenne (ang. spatial extension) jest określane przez jeden lub więcej kształtów (ang. shapes), które dołączasz do komponentu. Defold obsługuje następujące rodzaje obiektów kolizji:
- Static objects
- Obiekty statyczne nigdy się nie poruszają, ale obiekt dynamiczny, który koliduje z obiektem statycznym, zareaguje odbijaniem i/lub ślizganiem. Obiekty statyczne są bardzo przydatne do tworzenia geometrii poziomu (np. podłogi i ścian), która się nie rusza. Są także “tańsze” pod względem wydajności niż obiekty dynamiczne. Nie możesz przesuwać, ani w żaden inny sposób zmieniać obiektów statycznych.
- Dynamic objects
- Obiekty dynamiczne są symulowane przez silnik fizyki gry. Silnik fizyczny rozwiązuje wszystkie kolizje i stosuje wynikowe siły. Obiekty dynamiczne nadają się dla obiektów, które powinny zachowywać się realistycznie, ale nie możesz bezpośrednio manipulować pozycją i orientacją obiektu dynamicznego. Jedynym sposobem na ich wpływanie jest wpływ pośredni - poprzez stosowanie zewnętrznych sił (forces) lub zmianę tłumienia kątowego (angular damping) i prędkości liniowej (linear velocity) oraz tłumienia liniowego (linear damping) i prędkości kątowej (angular velocity).
- Kinematic objects
- Obiekty kinematyczne rejestrują kolizje z innymi obiektami fizycznymi, ale silnik fizyczny nie przeprowadza automatycznej symulacji. Rozstrzyganie kolizji lub ignorowanie ich pozostawione jest Tobie (dowiedz się więcej). Obiekty kinematyczne są bardzo dobre dla obiektów sterowanych przez gracza lub skrypt, które wymagają precyzyjnej kontroli nad reakcjami fizycznymi, takie jak np. postać gracza.
- Triggers
- Wyzwalacze to obiekty, które rejestrują proste kolizje. Wyzwalacze to bardzo “lekkie” obiekty kolizji. Są podobne do specjalnych, fizycznych promieni (ang. ray casts), ponieważ tylko odczytują świat fizyczny bez oddziaływania na niego. Nadają się do obiektów, które muszą tylko zarejestrować trafienie (np. pocisk) lub jako część logiki gry, w której chcesz wyzwalać określone akcje, gdy obiekt osiągnie określony punkt (często wykorzystywane waypointy, checkpointy, wyzwalacze miejsca, itp.). Wyzwalacze są obliczeniowo tańsze niż obiekty kinematyczne i powinny być stosowane zamiast nich, jeśli tylko jest to możliwe.
Dodawanie komponentu obiektu kolizji
Komponent obiektu kolizji ma zestaw Properties (Właściwości), które określają jego typ i właściwości fizyczne. Zawiera także jeden lub więcej Kształtów (Shapes), które definiują całą formę obiektu fizycznego.
Aby dodać komponent obiektu kolizji do obiektu gry:
- W panelu Outline, kliknij prawym przyciskiem myszy obiekt gry i wybierz z menu kontekstowego Add Component ▸ Collision Object. Tworzy to nowy komponent bez Kształtów.
- Kliknij prawym przyciskiem myszy nowy komponent i wybierz Add Shape ▸ Box / Capsule / Sphere. Dodaje to nowy Kształt (odpowiednio: Prostopadłościan / Kapsuła / Sfera) do komponentu obiektu kolizji. Możesz dodać dowolną liczbę kształtów do komponentu. Możesz także użyć mapy kafelków (tilemap) lub powłoki wypukłej (convex hull), aby zdefiniować Kształt obiektu fizycznego.
- Użyj narzędzi do przesuwania, obracania i skalowania, aby edytować Kształty.
- Wybierz komponent w panelu Outline i edytuj Properties obiektu kolizji.
Dodawanie kształtu kolizji
Komponent kolizji może używać kilku podstawowych kształtów (primitive shapes) lub pojedynczego, skomplikowanego kształtu. Dowiedz się więcej o różnych kształtach i jak je dodawać do komponentu kolizji w instrukcji do Kształtów Kolizji.
Właściwości obiektu kolizji
- Id
- Identyfikator komponentu.
- Collision Shape
- Kształt Kolizji - ta właściwość jest używana dla geometrii mapy kafelków (tile map) lub kształtów wypukłych (convex shapes), które nie używają kształtów podstawowych. Zobacz szczegóły w instrukcji do Kształtów Kolizji.
- Type
- Typ obiektu kolizji:
Dynamic
- dynamiczny, Kinematic
- kinematyczny, Static
- statyczny lub Trigger
- wyzwalacz. Jeśli ustawisz obiekt jako dynamiczny, to musisz ustawić wartość Mass (Masa) na wartość niezerową. Dla obiektów dynamicznych lub statycznych powinieneś także sprawdzić, czy wartości Friction - Tarcia i Restitution - Restytucji są odpowiednie dla twojego przypadku użycia.
- Friction
- Tarcie - pozwala na realistyczne ocieranie/ślizganie się obiektów względem siebie. Wartość współczynnika tarcia jest zazwyczaj ustawiana między 0 (brak tarcia — bardzo śliski obiekt) a 1 (duże tarcie — obiekt ścierny). Jednakże dowolna wartość dodatnia jest poprawna.
Siła tarcia jest proporcjonalna do siły normalnej (nazywa się to tarciem Coulomba). Gdy obliczana jest siła tarcia między dwoma kształtami (A
i B
), wartości tarcia obu obiektów są łączone za pomocą średniej geometrycznej:
\[F = sqrt( F_A * F_B )\]
Oznacza to, że jeśli jeden z obiektów ma współczynnik tarcia równy zeru, to kontakt między nimi będzie miał tarcie równe zeru.
- Restitution
- Wartość restytucji (inaczej współczynnik uderzenia) określa “sprężystość” obiektu. Wartość ta zazwyczaj mieści się między 0 (kolizja anelastyczna — obiekt w ogóle nie odbija się) a 1 (kolizja idealnie elastyczna — prędkość obiektu będzie dokładnie odbita).
Wartości restytucji między dwoma kształtami (A
i B
) są łączone za pomocą następującej formuły:
\[R = max( R_A, R_B )\]
Gdy kształt ma wiele kontaktów, restytucja jest przybliżana, ponieważ Box2D (węwnetrznie używany silnik fizyki) używa rozwiązywania iteracyjnego. Box2D stosuje również kolizje anelastyczne, gdy prędkość kolizji jest mała, aby zapobiec drganiom odbicia (bounce-jitter).
- Linear damping
- Tłumienie liniowe - zmniejsza liniową prędkość ciała. Różni się od tarcia, które występuje tylko podczas kontaktu, i może być używane, aby obiektom nadawać efekt “unoszenia się”, jakby poruszały się przez coś gęstszego niż powietrze. Poprawne wartości mieszczą się w zakresie od 0 do 1.
Box2D przybliża tłumienie w celu utrzymania lepszej stabilności i wydajności. Przy małych wartościach efekt tłumienia jest niezależny od kroku czasowego, podczas gdy przy większych wartościach tłumienia efekt tłumienia zmienia się w zależności od kroku czasowego. Jeśli uruchamiasz swoją grę z ustalonym krokiem czasowym, nie jest to problemem.
- Angular damping
- Tłumienie kątowe - działa jak tłumienie liniowe, ale zmniejsza prędkość kątową ciała. Poprawne wartości mieszczą się w zakresie od 0 do 1.
- Locked rotation
- Zablokowana rotacja - Ustawiając tę właściwość całkowicie wyłącza się obracanie na obiekcie kolizji, niezależnie od sił, jakie na niego działają.
- Bullet
- (ang. pocisk) Ustawienie tej właściwości umożliwia ciągłe wykrywanie kolizji (ang. Continuous Collision Detection - CCD) między obiektem kolizji a innymi dynamicznymi obiektami kolizji. Właściwość Bullet jest ignorowana, jeśli typ nie jest ustawiony na
Dynamic
- Dynamiczny.
- Group
- Nazwa grupy kolizji, do której obiekt powinien należeć. Możesz mieć 16 różnych grup i nadajesz im nazwy, jakie uważasz za stosowne w swojej grze. Na przykład “gracze”, “pociski”, “wrogowie” czy “świat”. Jeśli Kształt Kolizji jest ustawiony na Mapę Kafelków (Tile Map), to pole to nie jest używane, a nazwy grup są pobierane ze Źródła Kafelków (Tile Source). Dowiedz się więcej tutaj o grupach kolizji.
- Mask
- Maska - inne grupy, z którymi ten obiekt powinien kolidować. Możesz nazwać jedną grupę lub podać wiele grup oddzielonych przecinkiem. Jeśli pozostawisz pole
Mask
puste, obiekt nie będzie kolidować z niczym. Dowiedz się więcej tutaj o grupach kolizji.
Właściwości w trakcie działania gry
Obiekt fizyczny ma wiele różnych właściwości, które można odczytywać i zmieniać za pomocą go.get()
i go.set()
w trakcie działania programu (runtime):
angular_damping
- Wartość tłumienia kątowego komponentu obiektu kolizji (typ
number
). Dokumentacja API.
angular_velocity
- Bieżąca prędkość kątowa komponentu obiektu kolizji (typ
vector3
). Dokumentacja API.
linear_damping
- Wartość tłumienia liniowego obiektu kolizji (typ
number
). Dokumentacja API.
linear_velocity
- Bieżąca prędkość liniowa komponentu obiektu kolizji (typ
vector3
). Dokumentacja API.
mass
- Określona masa fizyczna komponentu obiektu kolizji. TYLKO DO ODCZYTU. (typ
number
). Dokumentacja API.