プレイヤーの中から、誰か一人を対象とした処理を行うやり方
概要
この記事は、Prestoniaさんが作ったワールドで使われている誰か一人のユーザーを取得する方法についての記事です。
ワールドはこちらから ホラワホームワールド -Japanese horror house- by Prestonia #VRChat #MadeWithVRChat
この記事を読む事で、以下の内容を知る事が出来ます。 - 全員のプレイヤーの中から、一人を抽出する方法 - その対象の人に対して何かを行う方法
開発環境
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の人かどうかを判断して、同じ人物だった場合処理を行い、そうでない場合は処理をしないようにします。