LoginSignup
3
2

More than 1 year has passed since last update.

【VRChat】VRCPlayerApi と Networking【SDK3】

Last updated at Posted at 2021-12-19

更新情報

2022年2月28日: VRCPlayerApi 操作系について、Respawnノードについての説明を追加。それに伴い、画像を差し替え。

目次

対象者

  • プレイヤーやその情報に関連するギミックを作りたい人

など...

この記事の概要

  • プレイヤーに関する情報を扱う方法(VRCPlayerApiNetworking)について説明
  • 主要なノードのみ説明
  • UdonGraphでの説明
  • プログラミングが分からなくてもOK

UdonGraphの情報が少ないので記事を書きました。
VRCユーザーがUdonをもっと手軽に扱えるようになりますように。

わかりにくいところや問題点があれば、Twitterなどにお願いします!
ちなみに、UdonGraphを用いたサンプルをBoothで無料配布していますので、良ければ参考にどうぞ。(随時更新)

動作確認環境
・Unity 2019.4.31f1
・VRCSDK3-WORLD-2022.02.16.19.13_Public

この記事は2022年2月28日時点の情報です。
Udonはアップデートされていくため、情報が古くなりやすく、最新版とは仕様が違うことがあります。

そもそもUdonが分からない人へ

入門記事を作成しておりますので、ご参考にどうぞ。
【VRChat】Udon Graph 入門【SDK3】

重要な用語説明

  • VRCPlayerApi
    VRChat内のプレイヤー情報。
    プレイヤー名やワールド上の位置などが取得出来る。

  • ローカルプレイヤー
    自分自身のこと。

  • インスタンスオーナー
    インスタンスを建てた人。

  • インスタンスマスター
    インスタンスに最も早く入ったプレイヤー。そのプレイヤーがインスタンスを抜けた場合は、次に早く入っていたプレイヤーに移る。

  • オーナー
    オブジェクトの操作権限があるプレイヤー。

  • プレイヤーID
    インスタンスに入った順で割り振られる番号。同じプレイヤーが入り直した場合、新たな番号が割り当てられる。

VRCPlayerApi

検索では「VRC→PlayerApi」の位置にあります。

プレイヤー情報系

Player_Info.PNG

ノード名 説明
get displayName VRCPlayerApiデータに格納されているプレイヤー情報から、プレイヤーの表示名を得る。
get isInstanceOwner VRCPlayerApiデータに格納されているプレイヤー情報が、インスタンスオーナーのものであればTrue、そうでなければFalseを得る。
get isLocal VRCPlayerApiデータに格納されているプレイヤー情報が、自身のものであればTrue、そうでなければFalseを得る。
get isMaster VRCPlayerApiデータに格納されているプレイヤー情報が、インスタンスマスターのものであればTrue。そうでなければFalseを得る。
get playerId VRCPlayerApiデータに格納されているプレイヤー情報から、プレイヤーIDを得る。
GetPosition VRCPlayerApiデータから、該当するプレイヤーの位置を得る。
IsUserInVR VRCPlayerApiデータから、プレイヤーがVRを使用していればTrue、そうでなければFalseを得る。
IsOwner VRCPlayerApiデータから、プレイヤーがオブジェクトのオーナーであればTrue、そうでなければFalseを得る。
IsValid VRCPlayerApiデータが有効なものであればTrue、そうでなければFalseを得る。
Equals VRCPlayerApiデータの内容が同じであればTrue、そうでなければFalseを得る。

データ取得系

Data_Get.PNG

ノード名 説明
GetPlayerById プレイヤーIDから、VRCPlayerApiデータを得る。
GetPlayerCount インスタンスに居るプレイヤーの人数を得る。
GetPlayers インスタンスに居るプレイヤー全員の情報が含まれる、VRCPlayerApi配列を得る。(使い方が若干特殊なので、作例参照)

操作系

Control_2.PNG

ノード名 説明
TeleportTo VRCPlayerApiデータから、該当するプレイヤーを指定した座標にテレポートさせる。(teleportRotで向きを決められますが、今回は割愛)
Respawn VRCPlayerApiデータから、該当するプレイヤーをリスポーンさせる。((Void)の部分を(int)に変えると、spawnsIndexという項目が現れます。これはVRCWorldで設定出来る複数のスポーン地点から1つを指定するための番号です。詳細は下図を参照)

VRCWorld_Spawns.PNG

Networking

検索では「VRC→Networking」の位置にあります。

Networking.PNG

ノード名 説明
get IsInstanceOwner ローカルプレイヤーがインスタンスオーナーであればTrue、そうでなければFalseを得る。
get IsMaster ローカルプレイヤーがインスタンスマスターであればTrue、そうでなければFalseを得る。
get LocalPlayer ローカルプレイヤーのVRCPlayerApiデータを得る。
GetOwner オブジェクトのオーナーのVRCPlayerApiデータを得る。
IsOwner ローカルプレイヤーがオブジェクトのオーナーであればTrue、そうでなければFalseを得る。
SetOwner VRCPlayerApiデータが示すプレイヤーを、オブジェクトのオーナーに設定する。

作例

GetPlayers使い方.PNG
これは、GetPlayersの使い方です。
GetPlayerCountでプレイヤーの人数を取得して、VRCPlayerApi[]のConstructorに渡すことで、人数分の大きさのVRCPlayerApi配列を作成出来ます。
この配列をGetPlayersに渡すことで、プレイヤー全員の情報が入ったVRCPlayerApi配列を得ることが出来ます。

作例.PNG
これは実際にVRCPlayerApiとNetworkingを使って、インタラクトするとテレポートするオブジェクトを作ってみた例です。
別の場所に配置したゲームオブジェクトをpublic変数を使って参照し、その座標にテレポートさせます。

おわりに

ご覧いただきありがとうございます。
参考になれば幸いです。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2