RPC (Remote Procedure Call) to funkcja sieciowa w Godot, która umożliwia zdalne wywoływanie funkcji pomiędzy różnymi klientami oraz serwerem w trybie sieciowym. Dekorator @rpc
pozwala oznaczyć funkcję jako taką, która może być wywoływana zdalnie w sieci (np. w grach wieloosobowych).

Jak działa RPC w Godot?
- Serwer i klient:
W kontekście sieci w Godot mamy serwer, który zarządza grą, i klientów, którzy do niego dołączają. RPC pozwala klientom oraz serwerowi komunikować się ze sobą poprzez wywoływanie funkcji na zdalnych maszynach. - Dekorator
@rpc
:
Aby oznaczyć funkcję jako zdalną (RPC), używamy dekoratora@rpc
. Możemy określić, na którym urządzeniu funkcja ma być wywołana, korzystając z parametrów, takich jak"any_peer"
,"authority"
, lub"master"
. Przykład:
@rpc("any_peer")
func sync_player_position(pos: Vector3):
global_transform.origin = pos
W tym przykładzie funkcja sync_player_position()
jest oznaczona jako zdalna i może być wywołana na dowolnym urządzeniu w sieci.
- Typy RPC:
Godot oferuje różne sposoby wywoływania RPC, które określają, jaką rolę pełni funkcja w kontekście sieci:
"any_peer"
: Funkcja może być wywołana zarówno przez serwer, jak i klientów."authority"
: Wywoływana tylko przez serwer (lub klient będący serwerem)."master"
: Wywoływana tylko przez właściciela obiektu.
- RPC Mode:
Można używać RPC w różnych trybach:
rpc()
: Wywołuje funkcję na zdalnym urządzeniu.rpc_id()
: Wywołuje funkcję na urządzeniu o konkretnym ID.rset()
: Używany do zdalnego ustawiania zmiennych.
Przykłady użycia:
Synchronizacja pozycji gracza w grze sieciowej:
@rpc("any_peer")
func sync_player_position(pos: Vector3):
global_transform.origin = pos
Funkcja sync_player_position()
pozwala na synchronizację pozycji gracza. Każdy klient lub serwer może wywołać tę funkcję i ustawić pozycję gracza.
Wywołanie zdalnej funkcji tylko na serwerze:
@rpc("authority")
func process_damage(damage: int):
health -= damage
W tym przypadku funkcja process_damage()
może być wywoływana tylko przez serwer, co zapewnia, że to serwer zarządza zdrowiem gracza.
Ustawienie zmiennej na kliencie:
@rpc("any_peer")
func sync_player_health(health_value: int):
health = health_value
Funkcja sync_player_health()
pozwala zsynchronizować zdrowie gracza między różnymi klientami.
Jak wywołać RPC?
- rpc():
Wywołuje funkcję RPC na wszystkich urządzeniach (serwer i klienci).
rpc("sync_player_position", Vector3(1, 2, 3))
- rpc_id():
Wywołuje funkcję RPC tylko na konkretnym urządzeniu, np. kliencie o danym ID.
rpc_id(3, "sync_player_position", Vector3(1, 2, 3)) # Wywołuje RPC na kliencie o ID 3
- rset():
Służy do zdalnego ustawienia zmiennych.
rset("health", 50)
Tryby synchronizacji:
- Unreliable (UDP): Używane domyślnie w RPC. Komunikaty mogą zostać zgubione, ale są szybsze.
- Reliable (TCP): Używane do krytycznych informacji, gdzie komunikaty muszą dotrzeć, nawet jeśli jest to wolniejsze.
Zastosowania w praktyce:
- Synchronizacja pozycji i rotacji obiektów w grze sieciowej.
- Zarządzanie zdrowiem lub punktami życia graczy.
- Obsługa interakcji między różnymi klientami, np. otwieranie drzwi, uruchamianie zdarzeń.
RPC w Godot jest bardzo elastyczne i pozwala na łatwe tworzenie gier sieciowych, gdzie serwer i klienci mogą efektywnie wymieniać się danymi.
Dodaj komentarz