VRChatクライアント
このページではVRChat UdonでのLapisCastクライアントについて解説します。
VRChatの制限
VRChatでは現在外部アクセスの制限として「Allow un Trusted URLs」のチェックが必要です。 そのためVRChatワールドから利用する場合には来場された皆さんに「Allow un Trusted URLs」の設定の案内をお願いします。
また、レート制限によりUdonからStringLoadingを使用した通信はワールド全体で5秒に一度ずつのみ実行されます。
LapisCast以外のギミックがある場合これと干渉を起こし、継続的な情報の受信ができない可能性があります。
その場合は配信インスタンスの「MessageCacheTime」とVRChatクライアントの「LoadingInterval」を長い時間に変更してください。
VRChatクライアントの制限
LapisCastはアップロードされた情報を時系列順に再構成、再実行を行いますが、LapisCastはあまりにも細かいタイムスタンプ間隔での通信を重要だとは考えていません。
そのため、LapisCastクライアントは最小のイベント記録間隔を0.05秒(20FPS)程度に設定しています。
使い方
VCCからプロジェクトに導入 プロジェクト内のPacages/LapisCastにある「LapisCast」プレハブをシーンに設置
VCC用パッケージの登録はこちらから LapisCast VRChatClient
LapisCastクライアントの構成
VCCパッケージを導入するとUnityプロジェクトにPackages/LapisCastが生成されます。 このファイルにはUnityシーンに配置するプレハブとUdonスクリプトが含まれます。 LapisCastクライアントはメインの処理を行う「LapisCastCore」と、Udonギミック開発をサポートする「LapisCastBehaviour」などのスクリプトから構成されます。
UdonでLapisCastの機能を使えるようにする
UdonでLapisCastを使用するには'LapisCastBehaviour'を継承し、'LapisCastBehaviourInit'を実行する必要があります。
using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;
using LapisCast; //追加
using VRC.SDK3.Data; //追加
public class LapisCastDebugger : LapisCastBehaviour //書き換える
{
void Start()
{
//追加
LapisCastBehaviourInit();
//または
LapisCastBehaviourInit("your_spacename");
}
}
'LapisCastBehaviourInit' にはバリエーションが存在し、実行時に引数にstringでネームスペース名を設定することができます。デフォルトは"every"であり、nullは反映されません。 "every"スペースの使用は他の開発者と同じスペースを使用してしまう可能性があるため非推奨です。 代わりにユーザー名+ギミック名などのユニークになりやすいスペース名を使用することを推奨します。
UdonからLapisCastへアップロードする
LapisCastへデータをアップロードするには'SendLapisCast()'関数を使用します。 以下の関数をUdonスクリプトに追加することでアップロードすることができます。
//イベントを送信する
public void UploadLapisCastTest (string keyname, DataToken value){
SendLapisCast(keyname, value);
}
//または
public void UploadLapisCastTest (string spanename, string keyname, DataToken value){
SendLapisCast(spanename, keyname, value);
}
'UploadLapisCast'には2つのバリエーションがあり、ターゲットにするネームスペース名を省略できます。 省略すると初期化時に'LapisCastBehaviourInit'から設定したネームスペース名が使用されます。デフォルトは"every"です。
冗長モードの使用
LapisCastは負荷が大きい大型イベントなどでの使用を想定して、複数クライアントを組み合わせて同じイベントを同時にサーバーへアップロードする機能に対応しています。
この機能を利用するにはデスクトップアプリから「VRCLogCollector」の設定を変更してください。
Info LapisCastクライアントは0.05秒間隔より短時間の連続イベント実行を記録しません。 また、キューのリフレッシュが行われる前に実行された同名のイベントは値が上書きされます。
Info
冗長モードを使用すると複数のクライアントを使用することができるようになります。
そのためクライアントの数に応じて必然的にアップロードの回数も増えるためクレジットの消費量にご注意ください。
LapisCastのデータをUdonで受け取る
LapisCastから配信データを受け取るには'OnLapisCastEvent()'関数を使用します。 以下の関数をUdonスクリプトに追加することでイベントを受け取ることができます。
//イベントを受信する
public override void OnLapisCastEvent(string spanename, string keyname, DataToken value, bool sameinstance)
{
//your program here.
}
パラメータ名 | 説明 | 取りうる値の例 |
---|---|---|
spanename | ネームスペース名 | "every" |
keyname | イベント名 | "TestEvent_0" |
value | イベントの値 | "TestMessage", 12.345, true |
sameinstance | 配信元が同じインスタンスがどうか | true, false |
初期化時に'LapisCastBehaviourInit()'から設定したネームスペースのイベントのみがトリガーされます。 そのため何も設定していなければ"every"スペースのイベントのみがトリガーされます。 これにより、イベントを受信した際に設定したネームスペースのイベントのみを選択的に受信することができます。 'sameinstance'がtrueの場合、そのイベントはプレイヤーがいるインスタンスと同じインスタンスからアップデートされたイベントとなります。 イベントが無限ループになってしまわないように注意してください。
すべてのネームスペースのイベントを受信するには以下のように'OnLapisCastAllEvent()'を使用します。
//イベントを受信する
public override void OnLapisCastAllEvent(string spanename, string keyname, DataToken value, bool sameinstance)
{
//your program here.
}