RPC çağrıları
- Oyun Geliştirme kursu
- İleri seviye
- Ders 16/71
- 4 dk
ClientRpc ve ServerRpc ile uzak çağrı yapmayı öğrenirsin.
Uzak Yordam Çağrıları (RPC)
RPC (Remote Procedure Call), bir makinede çalışan kodun ağ üzerinden başka bir makinedeki fonksiyonu tetiklemesini sağlar. Oyunlarda görsel efektleri, sesleri veya anlık duyuruları tüm oyunculara iletmek için kullanılır.
// Sunucuda cagirilir, tum bagli istemcilerde calisir
[ClientRpc]
public void RpcPlayExplosionEffect(Vector3 pos) {
Instantiate(explosionPrefab, pos, Quaternion.identity);
}Mirror'da sunucudan istemcilere yapılan çağrılar [ClientRpc] niteliği ve Rpc ön eki ile belirtilir.
ServerRpc ve Netcode for GameObjects
Unity'nin resmi çözümü olan Netcode for GameObjects (NGO) kütüphanesinde RPC çağrıları açıkça adlandırılır: İstemciden sunucuya giden çağrılara [ServerRpc], sunucudan istemcilere giden çağrılara ise [ClientRpc] denir.
// NGO kuralinda ServerRpc sonek ile biter
[ServerRpc]
public void SubmitScoreServerRpc(int score) {
// Sunucu skoru kaydeder
}Bu simetrik yapı veri akışının yönünü kod seviyesinde son derece açık ve denetlenebilir kılar.
Uygulama ClientRpc çağrı akışı
Bir Start metodu tanımla. İçinde konsola "Sunucudan tum istemcilere ClientRpc gonderildi" metnini Debug.Log ile yazdır.
Başlangıç kodu
using UnityEngine;
public class RpcController : MonoBehaviour
{
// Start icinde RPC akisini yazdir
}Örnek çözüm
using UnityEngine;
public class RpcController : MonoBehaviour
{
void Start()
{
Debug.Log("Sunucudan tum istemcilere ClientRpc gonderildi");
}
}Beklenen çıktı
Sunucudan tum istemcilere ClientRpc gonderildi
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Sunucunun tüm bağlı istemcilerde aynı anda bir patlama efekti oynatmak için kullandığı RPC türü hangisidir?
- StaticRpc
- ClientRpc Doğru cevap
- ServerRpc
- LocalRpc
Açıklama: Sunucudan tüm istemcilere uzaktan fonksiyon çağırmak için ClientRpc (veya Rpc ön ekli metotlar) kullanılır.
2 ClientRpc tanımla
[____] public void RpcPlayExplosion() {}
[ClientRpc] public void RpcPlayExplosion() {}
Açıklama: Sunucunun tüm istemcilerde çalıştırması istenen metotlar '[ClientRpc]' niteliği ile tanımlanır.
3 RPC mekanizmaları
| Kavram | Anlamı |
|---|---|
RPC |
Uzak makinede fonksiyon çağrısı |
ClientRpc |
Sunucudan tüm istemcilere giden çağrı |
ServerRpc |
İstemciden sunucuya giden talep çağrısı |
TargetRpc |
Sunucudan tek bir istemciye çağrı |