プレイヤーの中から、誰か一人を対象とした処理を行うやり方

概要

この記事は、Prestoniaさんが作ったワールドで使われている誰か一人のユーザーを取得する方法についての記事です。

ワールドはこちらから ホラワホームワールド -Japanese horror house- by Prestonia #VRChat #MadeWithVRChat

vrchat.com

この記事を読む事で、以下の内容を知る事が出来ます。 - 全員のプレイヤーの中から、一人を抽出する方法 - その対象の人に対して何かを行う方法

開発環境

Unity2019.4.31f1 VRCSDK3-WORLD-2022.04.20 16.26 U# v0.20

実際に行う事

ざっくり行う事としては、2つです。

  • プレイヤーIdの保持
  • プレイヤーIdから、特定のプレイヤーのみの処理を行う。

プレイヤーIdの保持

VRCではプレイヤーにプレイヤーIdが存在しています。 このプレイヤーIdはVRCPlayerApiから取得できます。

OnPlayerJoinと、OnPlayerLeftという関数がVRC側から提供されておりPlayerがJoin/Leftのタイミングで、以下のようなコードでVRCPlayerApi取得する事が出来ます。

public override void OnPlayerJoined(VRCPlayerApi player)
{
    //ここに処理を記述する
}


public override void OnPlayerLeft(VRCPlayerApi player)
{
    //ここに処理を記述する。
}

この時に、このIdを情報として保持しておく事で、現在存在するプレイヤーの一覧が事実上取得が可能になります。

プレイヤーIdから、特定のプレイヤーのみの処理を行う。

保持さえすれば、あとはやる事としては3つです。 1. ランダムで対象を選ぶ 2. したい処理を全体で行う 3. 選ばれたプレイヤー以外は処理しないようにする

1 ランダムで対象を選ぶ

UnityEngine.Random.Rangeで保存しているプレイヤーIdから、どれかを選択します。 この時、選ばれたものをUdonSync属性のついた変数に保存します。

2 したい処理を全体で行う

全体を行うというのは、SendCustomNetworkEventで、共通の引数なしの関数を呼び出しの事を指します。

3 選ばれたプレイヤー以外は処理しないようにする

2で呼びだした関数の処理内で、Networking.LocalPlayerでその選ばれたプレイヤーのIdの人かどうかを判断して、同じ人物だった場合処理を行い、そうでない場合は処理をしないようにします。