入力したテキストを同期する
通常、IwashiIME を使用して InputField に入力した文字は ローカル(自分の画面のみ) に反映され、他のプレイヤーには見えません。
入力した内容を他のプレイヤーとも共有したい場合(チャットや掲示板など)は、UdonSharp を使用して変数の同期を行う必要があります。
ここでは、シンプルな「入力されたテキストを全員に同期して、Text(TMP)に表示する」方法を解説します。
UdonSharp スクリプトの作成
テキストを同期するための UdonSharp スクリプトを作成します。
以下のコードをコピーして、SyncText.cs などの名前で保存してください。
using UdonSharp;
using UnityEngine;
using TMPro;
using VRC.SDKBase;
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
public class SyncText : UdonSharpBehaviour
{
[Header("同期された文字を表示するText")]
[SerializeField] private TMP_Text _targetText;
[Header("入力を行うInputField")]
[SerializeField] private TMP_InputField _sourceInputField;
// 同期する文字列変数
[UdonSynced] private string _syncedText = "";
private void Start()
{
// 初期化時に現在同期されている値を反映
if (_targetText != null)
{
_targetText.text = _syncedText;
}
}
// InputFieldで送信された時に呼び出すメソッド
public void _OnSendSubmit()
{
if (_sourceInputField == null) return;
// オーナー権限を取得
if (!Networking.IsOwner(gameObject))
{
Networking.SetOwner(Networking.LocalPlayer, gameObject);
}
// 変数を更新
_syncedText = _sourceInputField.text;
// ローカルの表示も更新
if (_targetText != null)
{
_targetText.text = _syncedText;
}
// 入力欄をクリアする
_sourceInputField.text = "";
// 同期をリクエスト
RequestSerialization();
}
// 同期データを受け取ったときに呼ばれるイベント
public override void OnDeserialization()
{
if (_targetText != null)
{
// 受け取ったテキストを表示に反映
_targetText.text = _syncedText;
}
}
}
ポイント
[UdonSynced]: この属性がついた変数の値がネットワーク越しに同期されます。RequestSerialization(): 変数の値を更新した後にこれを呼ぶことで、他のプレイヤーへ送信されます。OnDeserialization(): 他のプレイヤーが更新した値を受け取ったタイミングで実行されます。ここで UI を更新します。
シーンへのセットアップ
作成したスクリプトをオブジェクトに設定します。
1. スクリプトのアタッチ
任意の GameObject(管理しやすい空のオブジェクト等でOK)に、作成した SyncText スクリプトをアタッチします。
Inspector で以下の2つを割り当ててください。
- Target Text: 同期された文字を表示したい
TMP_Text - Source Input Field: 文字入力を行う
TMP_InputField

2. イベントの登録
InputField への入力アクションを検知してスクリプトを動かす設定をします。
- Source Input Field に指定した
TMP_InputFieldコンポーネントのOn End Edit (String)イベントを探します。 +ボタンを押してイベントを追加します。Object欄に、先ほどスクリプトをつけたオブジェクトを割り当てます。- Function のプルダウンから
UdonBehaviour SendCustomEvent (string)を選択します。 - 文字列入力欄に、呼び出したいメソッド名である
_OnSendSubmitを入力します。

動作確認
VRChat でワールドをビルド&アップロード(または Build & Test)して確認します。
2つのクライアント(自分と他人、または2プロセス起動) でワールドに入り、片方が文字を入力して OKボタン を押した際、もう片方の画面の Text にも同じ文字が表示されれば成功です。
IwashiIME との連携
IwashiIME を経由して入力した場合も、最終的には InputField の文字が書き換わり送信イベントが走るため、この On End Edit イベントが発火して同期処理が正しく行われます。
特別な設定は必要ありません。