🍜

UdonSharpで自分のプラットフォーム(PCVR, Desktop, Quest, Androidスマホ)を判別する

2023/09/02に公開

概要

「PC系(PCVR, Desktop)」か「Quest系(Quest, Androidスマホ)」の判別は、
Unityのプラットフォーム依存コンパイル機能で行います。

PC系の「PCVR」か「Desktop」の判別と、
Quest系の「Quest」か「Androidスマホ」の判別は、
UdonSharpのVRCPlayerApiのIsUserInVR()で行います。

https://docs.unity3d.com/ja/2018.4/Manual/PlatformDependentCompilation.html
https://creators.vrchat.com/worlds/udon/players/#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 (クリエイティブ・コモンズ・ゼロ)です。
いかなる権利も保有しません。自由に使ってください。
https://drive.google.com/file/d/1d6pxJ_Oi4r09QJoUhn4nlvRpJ7PnZJdN/view?usp=sharing

Discussion