リアルタイム通信
リアルタイム通信は マルチプレイヤーロビー のサブ機能で、ルーム内プレイヤー間でカスタムデータを送るために使います。Unity では信頼性付きチャネルと大きなメッセージの分割を提供し、Godot では現在 JSON メッセージ入口を提供しています。リアルタイム通信は先にルーム接続を完了する必要があり、ルーム参加前に単独では使用できません。
サポートしているエンジン
Section titled “サポートしているエンジン”| エンジン | 状態 | 説明 |
|---|---|---|
| Unity | Preview | ルームメッセージ、信頼性付き転送、大きなメッセージの分割をサポートします。 |
| GameMaker | 未対応 | 現在の GameMaker 初回公開版にはリアルタイム通信は含まれません。 |
| Godot | 開発中 | プレビュー runtime には JSON メッセージの送受信があります。 |
- ルーム の最小フローが完了している。
- ルームに参加済みである。
- メッセージタイプには SDK の予約タイプを使用しない。
- 送信内容は両端で解析しやすいよう安定した構造にする。
using System;using UnityEngine;using IGP.UnitySDK;using IGP.UnitySDK.Models;
public sealed class IGPChatDriver : MonoBehaviour{ [SerializeField] private IGPRuntimeManager runtimeManager;
private void OnEnable() { runtimeManager.onMessageReceived.AddListener(OnMessageReceived); }
private void OnDisable() { runtimeManager.onMessageReceived.RemoveListener(OnMessageReceived); }
public async void SendChat() { await runtimeManager.SendMessageAsync(new Message { type = "chat.message", roomId = runtimeManager.CurrentRoomId, playerId = runtimeManager.PlayerId, reliable = true, content = new { text = "hello", sentAt = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), }, }); }
private void OnMessageReceived(string messageType, object content) { Debug.Log($"Message {messageType}: {content}"); }}GameMaker は現在、リアルタイム通信をサポートしていません。
using Godot;using IGP.GodotSDK.Autoload;
public partial class ChatPanel : Control{ private IGPGodotAutoload IGP => GetNode<IGPGodotAutoload>("/root/IGP");
public override void _Ready() { IGP.MessageReceived += OnMessageReceived; }
public async void SendChat() { await IGP.SendMessageJsonAsync( "chat.message", "{\"text\":\"hello\"}", reliable: true); }
private void OnMessageReceived( string messageType, string roomId, string playerId) { GD.Print($"Message {messageType} from {playerId}"); }}セルフテスト
Section titled “セルフテスト”| エンジン | 確認項目 |
|---|---|
| Unity | 2 つのクライアントが同じルームにおり、一方が送信した後、もう一方が onMessageReceived を受け取る。 |
| GameMaker | 現在はリアルタイム通信の検証対象外です。 |
| Godot | JSON メッセージ送信後、もう一方が MessageReceived signal を受け取る。 |
よくある問題
Section titled “よくある問題”- 送信は成功するが受信できない: 2 つのクライアントが同じルームにいるか確認してください。
- 内容の解析に失敗する: まず最も単純な JSON 文字列で検証してください。
- Unity で大きなメッセージ送信に失敗する: 信頼性付きメッセージ入口を優先してください。
- Godot で予約タイプエラーが出る: 業務側で定義したメッセージタイプ名に変更してください。