Read this manual in English

Wiadomości kolizji

Kiedy dwa obiekty kolizji kolidują ze sobą, silnik wysyła wiadomości do wszystkich komponentów w obu tych obiektach:

Odpowiedź na kolizję

Odpowiedź na kolizję "collision_response" to wiadomość wysyłana do wszystkich obiektów w przypadku ich kolizji. Zawiera ona następujące pola:

other_id
identyfikator innej instancji, z którą obiekt kolizji kolidował (typ hash).
other_position
pozycja innej instancji w przestrzeni świata gry (world position), z którą obiekt kolizji kolidował (typ vector3).
other_group
grupa kolizyjna innego obiektu kolizji, z którą obiekt kolizji kolidował (typ hash).

Wiadomość "collision_response" jest odpowiednia do rozwiązywania kolizji, gdzie nie potrzebujesz szczegółów dotyczących rzeczywistego przecięcia (intersection) obiektów, na przykład, jeśli chcesz wykryć tylko czy pocisk trafia wroga. W ciągu jednej klatki jest wysyłana tylko jedna z tych wiadomości dla każdej pary obiektów kolidujących ze sobą.

function on_message(self, message_id, message, sender)
    -- check for the message
    if message_id == hash("collision_response") then
        -- take action
        print("I collided with", message.other_id)
    end
end

Odpowiedź punktu kontaktu

Odpowiedź punktu kontaktu "contact_point_response" to wiadomość wysyłana, gdy jeden z kolidujących obiektów jest dynamiczny lub kinematyczny. Zawiera ona następujące pola:

position
pozycja punktu kontaktu/styku w przestrzeni świata gry (world position) (typ vector3)
normal
wektor normalny w przestrzeni świata do punktu kontaktu/styku, który wskazuje od innego obiektu kolizji w kierunku bieżącego obiektu, czyli tego, który otrzymał tę wiadomość (typ vector3).
relative_velocity
prędkość względna obiektu kolizji obserwowana z punktu widzenia innego obiektu kolizji, z którym obiekt, który otrzymał tę wiadomość kolidował (typ vector3).
distance
odległość penetracji między obiektami kolizji - nieujemna (typ number).
applied_impulse
impuls, czyli siła która wynikała z kontaktu (typ number).
life_time
(obecnie nieużywane!) czas trwania kontaktu (typ number).
mass
masa bieżącego obiektu kolizji w kilogramach (typ number).
other_mass
masa innego obiektu kolizji, z którym kolidował obiekt, który otrzymał tę wiadomość, w kilogramach (typ number).
other_id
identyfikator instancji, z którą obiekt kolizji znajduje się w kontakcie (typ hash).
other_position
pozycja w przestrzeni świata gry (world position) innego obiektu kolizji, z którym kolidował obiekt, który otrzymał tę wiadomość (typ vector3).
group
grupa kolizyjna innego obiektu kolizji, z którym kolidował obiekt, który otrzymał tę wiadomość (typ hash).

Dla gry lub aplikacji, w których potrzebujesz idealnie rozdzielać obiekty, wiadomość "contact_point_response" dostarcza wszystkie informacje, których potrzebujesz. Należy jednak zauważyć, że w przypadku danej pary kolizji, w zależności od charakteru kolizji, można otrzymać wiele wiadomości "contact_point_response" w jednej klatce. Zobacz szczegóły w instrukcji do rozwiązywania kolizji.

function on_message(self, message_id, message, sender)
    -- check for the message
    if message_id == hash("contact_point_response") then
        -- take action
        if message.other_mass > 10 then
            print("I collided with something weighing more than 10 kilos!")
        end
    end
end

Odpowiedź na wyzwalacz

Odpowiedź na wyzwalacz "trigger_response" to wiadomość wysyłana, gdy obiekt kolidujący ma typ "trigger" (wyzwalacz).

W kolizji typu “trigger” są wysyłane wiadomości "collision_response". Dodatkowo, wyzwalacze wysyłają również specjalną wiadomość "trigger_response" na początku i na końcu kolizji. Wiadomość ta zawiera następujące pola:

other_id
identyfikator instancji, z którą obiekt kolizji kolidował (typ hash).
enter
wejście - true jeśli interakcja była wejściem do wyzwalacza, false, jeśli była wyjściem (typ boolean).
function on_message(self, message_id, message, sender)
    -- check for the message
    if message_id == hash("trigger_response") then
        if message.enter then
            -- take action for entry
            print("I am now inside", message.other_id)
        else
            -- take action for exit
            print("I am now outside", message.other_id)
        end
    end
end