[VRChat / Unity] Unity+OSC を利用してChatboxに日本語を表示する
はじめに
VRChatのChatboxに、Unity+OSC を利用して日本語を表示したかったのですが、日本語が文字化けするという問題がありました。
問題の経緯と対応内容について情報まとめます。
環境
OS・ツールなど | バージョン | 備考 |
---|---|---|
Windows | OS10 | - |
Unity | 2021.3.17f.1 | - |
OscCoreライブラリ | v1.1.0 | - |
uOSCライブラリ | v2.2.0 | - |
結論
以下の「uOSC」というライブラリを利用することで、日本語の文字を手軽にVRChatへ表示することができた。
-
OSC送信時の例(日本語が正常に表示されたパターン)
上段: UnityのGameウィンドウ、下段:VRChat
-
処理例: コンポーネント設定
-
処理例:ソース
using UnityEngine;
using UnityEngine.UI;
using TMPro;
// uOSCライブラリ用
using uOSC;
public class OscSampleController : MonoBehaviour
{
// UI要素はInspectorから設定する
[SerializeField] TMP_InputField _inputFld;
[SerializeField] Button _sendBtn;
// OSC送信用の変数定義
private uOscClient _client = new uOscClient();
void Start()
{
_client = this.GetComponent<uOscClient>();
_sendBtn.onClick.AddListener(()=> {
this.SendBtnClick();
});
}
/// <summary>
/// 送信ボタン 押下時処理
/// </summary>
public void SendBtnClick() {
if (string.IsNullOrEmpty(_inputFld.text)) {
return;
}
// Chatboxに文字列を送信
_client.Send("/chatbox/input", _inputFld.text, false);
}
}
問題の詳細
経緯
もともとは、VRChat公式から推奨されている「OSC Core」というライブラリを利用予定だった。
ただし、VRChatのChatboxに日本語を送信したところ文字化けが発生した。
- OSC送信時の例(日本語が文字化けしたパターン)
※「あいうえお」と送信したはずが「BDFHJ」と文字化けする。文字コードが正しく反映されていない様子。
上段: UnityのGameウィンドウ、下段:VRChat
OSC送信処理例(OscCoreライブラリ利用)
-
コンポーネント設定
-
ソース
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using OscCore; // <= OSCCoreライブラリ用
public class OscSampleController : MonoBehaviour
{
// UI要素はInspectorから設定する
[SerializeField] TMP_InputField _inputFld;
[SerializeField] Button _sendBtn;
// OSC送信用の変数定義
// NOTE: ローカルIPと、VRChatの受信用ポート番号を指定
private OscClient _client = new OscClient("127.0.0.1", 9000);
void Start()
{
_sendBtn.onClick.AddListener(()=> {
this.SendBtnClick();
});
}
/// <summary>
/// 送信ボタン 押下時処理
/// </summary>
public void SendBtnClick() {
if (string.IsNullOrEmpty(_inputFld.text)) {
return;
}
// Chatboxに文字列を送信
_client.Send("/chatbox/input", _inputFld.text);
}
}
補足
VRChat v2022.2.2p3のリリースノートには以下記載があり、ChatboxのエンドポイントはASCIIコードしか対応していない旨の内容となっていた。
ただし実際は、「TouchOSC」ツールで日本語をOSC送信した際も問題なく表示できたので、今のVRChatのバージョンはUTF-8も対応している認識。
・There are two OSC endpoints to send chat via the chat textbox:
・/chatbox/input s b Input text into the chatbox. If b is True, send the text in s immediately, bypassing the keyboard. If b is False, open the keyboard and populate it with the provided text.
・/chatbox/typing b Toggle the typing indicator on or off.
・Right now the chatbox's OSC input endpoint only supports ASCII characters. It will support UTF-8 later. The chatbox itself supports UTF right now.
Discussion