自分の UI

標準パネルの見た目を変える、コードなしで自分のキャンバスやワールドのオブジェクトに操作を作る、C# で部品を書く。

更新日 2026-10-22

標準パネルに特別なところはありません。普通の uGUI に小さなコンポーネントが 6 種類載っていて、それぞれが VideoPlayer を指しているだけです。パネルにできることは、自分の UI でも同じやり方でできます。

パネルの見た目を変える

プレイヤーの Controls オブジェクトの下はすべて自由に変えられます。色、スプライト、フォント、レイアウト、どのボタンを置くか。ボタンを消しても残りはそのまま動きます。部品は名前で何かを探したりせず、インスペクターで設定した自分の参照だけを持っています。

コードなしで操作を作る

これらを自分のキャンバス、ワールド空間のメニュー、実物のオブジェクトに付けて、player を設定します。

部品 すること
VideoButton UI の Button から、またはコライダー付きのワールドオブジェクトの Interact からコマンドを実行します。状態をアイコンで示し、ローカルプレイヤーが使えないときは無効になります
VideoLabel 項目を TextMeshPro のテキストか旧来の Text に書きます。接頭辞と、空のときの文字を指定できます
VideoSlider 全員のためにシークする、または自分の音量を変える Slider
VideoLinkField VRCUrlInputField。Enter でリンクをキューに入れ、enterPlaysNow ならすぐ再生します
VideoShowWhen 条件が成り立つ間だけオブジェクトを表示し、読み込み中のくるくるも回せます
VideoQueueRow キューの 1 項目。タイトル、追加した人、今すぐ再生、削除

VideoButton はコマンドを取ります。TogglePause、Play、Pause、Skip、Stop、Reload、ToggleLoop、ToggleLock、ToggleMute、ClearQueue のどれかです。icon とスプライトを 2 枚渡すと切り替えてくれるので、ひとつのボタンで再生と一時停止を、南京錠で施錠と解錠を示せます。ワールドのオブジェクトで button を空にしておけば、VRChat で押したときにコマンドが実行されます。

VideoLabel は項目を取ります。Title、AddedBy、Status、Time、Position、Duration、Remaining、Volume、QueueCount、NextTitle、Owner、Url のどれかです。時間の項目は 1 秒に数回更新され、それ以外はプレイヤーが変わったときだけ変わります。

VideoShowWhen は条件を取ります。Idle、Loading、Playing、Paused、Failed、Live、HasVideo、Showing、CanSeek、Locked、CanControl、CanModerate、Muted、Looping、HasQueue、HasProblem のどれかで、invert で逆になります。targets を表示・非表示にするので、アクティブのままのオブジェクトに付けてください。自分の GameObject を隠した部品は更新が止まり、二度と戻りません。

物理ボタンがひとつと上に看板がある映画館の座席なら、コードは要りません。ボタンに TogglePause の VideoButton、看板に Title の VideoLabel を付けるだけです。

C# で部品を書く

VideoPart を継承して Refresh を実装します。プレイヤーの準備ができたときと、UI に表示するものが変わるたびに呼ばれます。

public class NowPlayingSign : VideoPart
{
    public TextMeshProUGUI sign;

    protected override void Refresh()
    {
        sign.text = player.IsPlaying ? player.Title : "";
    }
}

Tick はその後、毎フレーム呼ばれます。時計のように勝手に動くもの向けです。Position はそこで読み、処理は軽くしてください。

プレイヤーはどこからでも呼べます。PlayUrl、Enqueue、Play、Pause、TogglePause、SeekTo、Skip、Stop などはリファレンスにあります。コマンドはロックを確認してくれます。操作を許されていないプレイヤーの呼び出しは何も変えず、Status に短いお知らせを出すだけです。

自分のコードからプレイヤーを読む

VideoPart から読めば、タイミングを気にする必要はありません。部品はプレイヤーの準備ができるまで待ちます。別のビヘイビアの Start や Update からプレイヤーを読むコードは、先に player.player が設定されているか確かめてください。コマンドは Refresh を含め、どこからでも呼べます。

問題が発生しました 再読み込み