🍜
UdonSharpで自分のプラットフォーム(PCVR, Desktop, Quest, Androidスマホ)を判別する
概要
「PC系(PCVR, Desktop)」か「Quest系(Quest, Androidスマホ)」の判別は、
Unityのプラットフォーム依存コンパイル機能で行います。
PC系の「PCVR」か「Desktop」の判別と、
Quest系の「Quest」か「Androidスマホ」の判別は、
UdonSharpのVRCPlayerApiのIsUserInVR()で行います。
環境
- Unity 2019.4.31f1 (64-bit)
- VRChat SDK - Base 3.2.3
- VRChat SDK - Worlds 3.2.3
- Udon Sharp 1.1.9
UdonSharpスクリプト
ワールドにJoinしたらTextに自分のプラットフォームを表示するUdonSharpスクリプトです。
Unity Editor上でVRCPlayerApiを参照してしまうとエラーが出るため、Start()内のif文でUnity Editor上では動かないようにしてあります。
※ClientSimでは動きますが、結局アップロード時にエラーが出てしまいます。
using UdonSharp;
using UnityEngine;
using UnityEngine.UI; // Textオブジェクトを扱う場合に必要
using VRC.SDKBase;
using VRC.Udon;
public class PlatformJudgmentTest : UdonSharpBehaviour
{
private VRCPlayerApi MyPlayerApi;
private string MyPlatform = "Unknown";
public Text TextView;
void Start()
{
// アップロード時にVRCPlayerApi関係のエラーが出るのでEditor上では動かないようにする
#if UNITY_EDITOR
#else
// Start時はなにかと不安定なので2.0秒後にPlatformJudge()を実行
SendCustomEventDelayedSeconds(nameof(PlatformJudge), 2.0f);
#endif
}
public void PlatformJudge()
{
// 自分のVRCPlayerApi情報を保存
MyPlayerApi = Networking.LocalPlayer;
// Windowsだったら実行
#if UNITY_STANDALONE_WIN
if (true == MyPlayerApi.IsUserInVR())
{
MyPlatform = "PCVR"; // WindowsでVRならPCVR
}
else
{
MyPlatform = "Desktop"; // WindowsでVRじゃなかったらDesktop
}
// Androidだったら実行
#elif UNITY_ANDROID
if (true == MyPlayerApi.IsUserInVR())
{
MyPlatform = "Quest"; // AndroidでVRならQuest
}
else
{
MyPlatform = "Android Phone"; // AndroidでVRじゃなかったらAndroidスマホ
}
#endif
// 自分のプラットフォームを表示
TextView.text = "MyPlatform is " + MyPlatform;
}
}
実行結果
上記のUdonSharpスクリプトをVRChatのワールドとしてアップロードし、
PCVR, Desktop, Quest, Androidスマホの各環境でワールドにJoinした結果です。
※Androidスマホ版VRChatのバージョンは公開されて間もないAlpha(Build 1335)です。
完成品 (UnityPackage)
ワールドにJoinしたらTextに自分のプラットフォームが表示されるプレハブです。
ダウンロードデータ一式のライセンスはCC0 (クリエイティブ・コモンズ・ゼロ)です。
いかなる権利も保有しません。自由に使ってください。
Discussion