メインコンテンツまでスキップ

VRCPlayerApi「プレイヤーの情報を取得したり操作したり」

[記述完了率 一応100%]

VRCPlayerAPIは、プレイヤー周りの処理を行うクラス。

VRC公式リファレンス
https://creators.vrchat.com/worlds/udon/players/

U#リファレンス
https://udonsharp.docs.vrchat.com/vrchat-api#vrcplayerapi

VRCPlayerApi特有の注意事項​

VRCPlayerApiが指すプレイヤーがインスタンスから退出した後は、そのオブジェクトは無効になります。

変数に保存して使いまわす場合は、Is Valid関数(「Special」→「Is Valid」)で有効なVRCPlayerApiかチェックすることを推奨します。

VRCPlayerApiの取得​

VRCPlayerApi NetWorking.LocalPlayer「自分のVRCPlayerApiを取得」​

自分のVRCPlayerApiを取得します。

例は、Startイベント時に、_localPlayer変数に自分のVRCPlayerApiを代入する処理です。

application/vnd.unity.graphview.elements AN1V3U7bMBh9lcrXceSfz7FTiYsBm4SYGFq33kxVZDsOyjAJShxYVXgyLvZIe4W5FNYBk9qxIU2TfZHYX6xzzudz8u3m6wJdaD84NP60QNXg/ZE+iy9oqrtaG++K6fu9yf7hru5dfDr2eu66V+c1StBQl7HOlqoEIw3OqBAYCGPYCALYlDarVA66UjIWn7d9Heq2QeMF+oLGWAFJqSCEAVAgGRMJmsdlUDyFPM+zHBQDRvPrBDVt6T4e7PcRIYonrecsQZVvL+/2ZqvK6ZJMf8tmaOowf2c+OxumK4oLVDd90I11B/toTOLhfejq5uRuG6Hr5DmfTeZ9cGfp5HYxGZ31tu18bZLR1HV9JL0DKVmOZLQ3+DB0bqdxQ+i0T0bHg/G1PXTzD+2pa3aMlFpYkdGcgyMqvyp8a7Vfyf5n6Hbb1jvd/F14b7Tv3f+J6yW62bRNRDVb4vrJaq8vXBOKSdBd+GErpTQrwWVYcUcxVJRjJViFLXBuGMtyyuEXtqJEpEQKQhkjknB67ysBqYy+UiCBMkpyeOirh05CimfEZFJjJ0uDgRuDjRQWS14yw7Qg1jL02G+PWa1z48iFy7Y7jWqmRXHiQvF2faeLTfnCDVEaDMXS6SiEAY6NM4AJlKI0KneWZdsL8Vs6bGI4iVTuY3LduG20e4J3Q98EMMYzzhR9mofbCHRFXiYvX9AqW/1XnmfwfzevZnF8Bw==

「VRC」→「NetWorking」→「get LocalPlayer」

get_local_player

VRCPlayerApi[] GetPlayers(VRCPlayerApi[] player)「全プレイヤーのVRCPlayerApiを取得」​

引数で指定した配列に、全プレイヤーのVRCPlayerApiを格納します。

配列の長さが、プレイヤー数よりも小さい場合、エラーになるため注意してください。

例は、Startイベント時に、現在のプレイヤー数の長さの配列を作成し、_players変数に全プレイヤーのVRCPlayerApiを格納する処理です。

application/vnd.unity.graphview.elements AN1WW2/TMBj9K5Wf4+jz3a60h10ATZNgotAXVEVO7KBAlky5DKqyX8YDP4m/gNvu3mqEsUqIJA9J7FjfOT7nfPn5/ccCXdiy92j8YYHyvixf27PwgKa2KWxa+mT69nBydHJgWx/uTks7983+ebHfNHaOItQXLkymljMKTmEticOcE4mtoIBTSZVkWeZ0BmHyed0WXVFXaLxAX9EYE0pVTAGIEYxQEaF5eMkVjSEckgATRIQVLiNU1c6/Pz5qQ5UoLHR7zSKUl/WXq7HZeuZ0CahdIeqropu/ST/5rJuuYS5QUbWdrTJ/fITGEBZvu6aoPl4NI3QZPeWzybzt/Fk8Wb2MRmdtVjdlkUajqW/agHmPx7A8o9FhX3Z94/cq33eNLaPRaZ+WRXbi5+/qz77aS5WyIhOSGMY9aPMtOV+x3v5dZQd1XXpbPW9pL23Z+v+zrl3sZFVXoarZsq47Vntx4asumXS26W4cpbWljnuJNfME85wwrAXNccYZSymVhjC+xVHU6FgG8xglg3OuHWVWhmIgiBJKE6rvO+q+h5AC6YEIwFRxjbnnAlvHLCZZcLkTIjWWoIdOe4hp4rvkOkJuQA1aeQPUNSYmJSVgmFLDYC3zIfU25E/IJGedwVxqwMbzDLuwJYQz0KlJv8FugmSHOhqUt09T/79r5ocS296Y4iR55bv1Y5s81r0eHbzR7BAFbWpWixiMMYQLAUtprp34W8WC8OC18NjkKrjea4ctN4A5pS7PwPjM6CDXXTS9YeyuuAkUZ13dJMl604+rjtFhZA7Bt+0/ASCWAkALzg0lWg2kUykjpQUWUkZbzG2ucepygnMBJhMObAjJndB55YYVM8/rBXiKDw7rPjSYu9t1G8kDKNrWZzTEZDOT/6zTbPaQ2eUv

(左)「VRC」→「PlayerApi」→「GetPlayerCount」
(中)「VRC」→「PlayerApi[]」→「constructor」
(右)「VRC」→「PlayerApi」→「GetPlayers」

get_players

VRCPlayerApi GetPlayerById(int playerId)「PlayerIDを元にVRCPlayerApiを取得」​

PlayerIDを元に、VRCPlayerApiを取得します。

注:ここで言うIDは、最初に入った人を1として、Joinするたびに値を1増やして付与される値のこと。

PlayerIDについて​

PlayerIDの決定規則
プレイヤーIDは最初に入った人を1として、どんどん数字が増えていく

1 : user1 2 : user2 3 : user3

ここでuser2が抜けて、そのあとuser4が入ってきた場合は2が欠番となり、user4のplayerIDは4になる。

1 : user1 3 : user3 4 : user4

また、ここでuser2が戻ってきた場合はplayerIDは5になる

1 : user1 3 : user3 4 : user4 5 : user2

https://kurotori4423.github.io/KurotoriMkDoc/VRChat/UDON でギミック/ より引用

例は、Startイベント時に、_player変数にPlayerIDが1番のVRCPlayerApiを代入する処理です。

application/vnd.unity.graphview.elements AN1VXW/TMBT9K5Wf48jfsSvtga2AqkkwUegLqiI7dlAgdarEGVTdftke+En8Bdx2DOgKVGOVEEoe4mvn6px7z7n+cvN5BS513TswfLsCZV/XL/Q8LsBUt5U2tcunr84mo/NT3bn4dVHrpWufLCqQgL6y8VxhpWUmM1BgziFDhEDDEYPGFqKUiulSZvHwoumqUDUeDFfgExhCgjhLhVKKY5xhmfEELGMYEylSKqRUgklGM36dAN9Y92Y86iJCEDN9f2cJKOvm4+3ebHtyuibTbdj0vgrLl+a9K8J0S3EFKt8F7Qs3HoEhism70Fb+3e02ANfJQ36bLLvg5ulkE0wG865o2royyWDq2i6SPmEpWj/J4KyvQ9+6E+/60Oo6GVz0pq6Kc7d83Xxw/sRkmeYFF1hR5pBUV/liU/G/A3baNLXT/nGRPdN15/5PXMdopG98RDVb4/rBZU8vnQ/5JOg23DlKSk0scwJK6jBkJaZQclLCglFqCBEKU7bHUVKlkiOEBEaUYy7o1lESpYIQJbmkao+jfvYQ4MJghbmCxAoLGWcYKoYxJJkthZFIZGUJdp22S2riQv5tfNyxOijzPVaY0t+x4pySWJEYvj8nkMscVwJDW2gNmVYaSqYlVMIaZGNZORNX6Dhz5Ig6OmjePkz9/66ZdxW2/05K8/y5C9vl6XJs83wLbewDJfmfLrJD9LLHdr9Q6EagFGFBecYIlnJXoEcT3Ybt43YBrzswu/4K

「VRC」→「PlayerApi」→「GetPlayerById」

get_player_by_id

その他、イベントの引数としても取得できます。

メソッド(static)​

int GetPlayerCount()「プレイヤー数を取得」​

現在のプレイヤー数を取得します。

例は、Startイベント時に、_playerCount変数にプレイヤー数を代入する処理です。

application/vnd.unity.graphview.elements AN2VzY7TMBSFX6XyOo78m9iVumBaQNVIUFHoBlWRk9ygQOpUiTNQdfpkLHgkXgF3Oj+0HaEyUAmhZOHEvtY5yf2Ov3/9tkZXpuoA9d+vUdFV1Suz8A9oZprSpBUk01XrYDG2jjMUoK7M/SSPhWCx5FjzQmARK4KVEDkGQSkhaS7iKPaLl3VburK2qL9GX1AfUyZ4KAO08uNYylBJQngUMUo0V5sA2TqHd+NR67UgX/5wzwNUVPXn27n5buVsK7u90d3Z0q1epx8hc7OdmTUqbeuMzWA8Qn3iN29dU9oPt9MIbYKnlO0+Rji9eRn0Fm1WN1WZBr0ZNK13OhAh2V5Bb9hVrmtgYKFzjamC3qRLqzK7hNXb+hPYQRrHRmYyopoLIEpfJ8vKrKAZ1p11f6buoq4rMPbvynthqhb+T13n+Ju2tl7VfKvrJ6ieX4F1ydSZxt2zpJRhuYAIKw4Ui4JyrCQrcCY4TxmLNOXiEZa0viMpEqH2IFHGSEw4ZXKfpH12kM4YpUYUmHIALCSX2Og8wloYLnMuuYkydEjYoY8puOQuIO6NnLTzkZF9H0JrRSOlfTXlx4lASKG0zgg2BHzuQCxxmkcEZ5LFnBvBeEquyXkS44zNclKcPq3F/11iD3tq9mY4HV1emBb8aHKThc+WZZgkL8FNHqIxefRAOqUxfgXRbzF0TMd88wM=

「VRC」→「PlayerApi」→「GetPlayerCount」

get_player_count

プロパティ​

bool isLocal「プレイヤーが自分(ローカル)か否か」​

Getのみ可

VRCPlayerApiのプレイヤーが、が自分(ローカル)か否かを取得します。

例は、OnPlayerJoinedイベントの引数のplayerが自分か否かを、_isLocalPlayer変数に代入する処理です。

application/vnd.unity.graphview.elements AN1V22rbQBD9FbPPWrH3i8EPTdxCmtKEuvVLMWZXHgW18iroktY4+bI+9JP6C91ETpo4KZi0hlJWCGlmtcw5M+fox7fva3Thyg7Q8OMa5V1ZvnXL+IKmri6cL2E+WTUtLA+qqgQXUIK6YhHTPiOOeCqw9iCwENZgoxjFnuVAJQA11sTN51VTtEUV0HCNvqIh1kKljBCiOROMGi0TtIphGcNC3gtfJShUC/hwNG5iYSie9OuaJSgvqy+b3KzfOb3G0NyA6ELRrk78J8jaaY9sjYrQtC5kcDRGQxIPb9q6CGebNEJXyXM+65lJJzfBZLBssqouC58MplA3EfRIpOR6JYPDrmy7GkYBurZ2ZTI47XxZZMewel99hjDyWjuZSUUtF0CMvZwXzZsqc+Vp6VZQ/1l9m9b93QJfubKB/7OuffQzVCFWNbuu657GXl5AaOcnoe/y66oIsLhTmOILwbXTUVfSYMGFxt4whr0CyB0HrrV/QmFUq9REhXEulY03eysxm1otCaNcMU6Esg8l9lBUiBKzyKUiWFEusciBYQOZxotMyVx4Q3KSo23pbcObvjucjI8PXAPxqcf44rxI5/MzaG8HfP4bfzEyz3LlTIQrWUSf5dg5obChllGbE+MFe4ye0jRakTVUGSskp6wHr0jKWLQXRQmXVCpmtvxlF64vyV6cZ5u0SeTm1nvv2NipHY/ZiKOgbaRDa8usMlr1o7Chg6to2MTyp9x2F/ojIXtx4z3KcKe/1vPM49/1wllcPwE=

「VRC」→「PlayerApi」→「get isLocal」

is_local

string displayName「プレイヤーの表示名」​

Getのみ可

VRCPlayerApiのプレイヤーの表示名を取得します。

例は、Startイベント時に、_localPlayerName変数に自分の表示名を代入する処理です。

application/vnd.unity.graphview.elements AN1Vy07bQAD8lWjP3mi9742UQ4FWQlQUNW0uVWTty8hlsZEf0CjwZRz6Sf2FbuIABdI2oo1U1fbB9q7XM+OZ8bfbrwtwqUPnwejTAuRdCMf6PF6Aqa4LbYLPJvOm9eeTti7KU5CArnBx1BCaa8QN1C4nkOacQG2lgDnOuc85TY2hcfJF1RRtUZVgtABfwAimjKIhQQgrrLgULAHzeJdzOkQIpRgjgUiK2U0Cysr5j4cHTYQF4kIPxywBeaiu1mOzfuZ0yaBZUejKop2/M5+9bac9rwUoyqbVpfWHB2CE4uLNisx6GICb5CWP9boMe2GSwXljqzoUJhlMfd1EzuNIarkng/0utF3tx6Xv2lqHZHDSmVDYIz//UJ35cmyE0MwynipCPZLqOguV1eEk6LmvV5/jjxDuVVXwuvy7EN/o0PynuHbxRcuqjKhmS1w/ZGzi2+wuZ/fRop6nRKscImMxpM5SqFPOIJJYWkZzJ3L7PFqplEMk2EOIeJ8tppbRQkhwrIiijDzPFuEUE2UYNNYZSKXT0BBCISfIa2Y4dQJfo91kb4eSb1VRLzPKv+v7pw6bvt+fHBzt6cbHs75QXl0Uwyw7jdZzRXMRby2nZptrfhtrbKh5vrKiIJji9K7l10ZMGWZSSIX4EyMiKz3z3EEjrILUWgQ1cRI64hDF3JD4ZHThLur/56Id+/aqqs/i7LVkbx+KOcs2i3sv3jaMNv0j10lmQklClKRr/eRQxY0rKntZ5WMBfy3MU4qvL33ZZpNW1+09Xs7jWxGjEJsYk/gOCxWzNoL2UuZeKUrU9nh/1zyP8W7Xes9ZzW6+Aw==

「VRC」→「PlayerApi」→「get displayName」

display_name

bool isMaster「プレイヤーがインスタンスマスターか否か」​

Getのみ可

VRCPlayerApiのプレイヤーがインスタンスマスターか否かを取得します。

インスタンスマスター:Ownerを委譲していない全てのオブジェクトのOwnerになっている人。

インスタンスマスターの仕様変更

インスタンスマスターに関する仕様変更が起こる可能性があります。
今後のアップデートに注意してください。
https://ask.vrchat.com/t/network-update-season-master-transfer-creator-feedback-wanted/23026

例は、Startイベント時に、_isMasterPlayer変数に自分がインスタンスマスターか否かを代入する処理です。

application/vnd.unity.graphview.elements AN2V3W7TMBTHX6XydRz54zi2K+2CbSBNgzFR6A2qIsc5RWFZMuVjo+r2ZFzwSLwC7tp1o+OjGlRCxLlIbMc5/5/9P+fr5y9zcunKHsnw/ZxM+7I8cefhhYxdU7isxHQ0azs836/rEl1FItIXeRjWTCvMrKWWS6Dgpgm1LrdUGJv7RHIAnofJF3VbdEVdkeGcfCJDyjkXMWglgWubGK0iMgvdYE3MwpVwJhVXidA3EanqHN8dHbYhMhKWur8nEZmW9dVqbLKcOV6IaG9V9FXRzV5nH9F346W0OSmqtnOVx6NDMmRh8bZriurDapiQm+gpny3RxKPbzmhw3vq6KYssGoyxaYPqPYjZokWDg77s+gb3Kuy7xpXR4LTPysIf4+xtfYbVXqa1U14l3EpAZux1WrSvXFi9OS3dDJs/C3C1eX83wheubPH/jGsXG1rVVYhqsojrgcueX2LVpaPONd3aWkmiFWMKqMiMpiC4p1Z5T51EY6ZoLUj7I2tpGRuhOLeMG6VAL62lTGwXl5CaJWHVDWd97yUCTmn0gHTqMfxb8YyaoISiYR4SkYCBKdl03Kao8ZuD0eHxvmvxBLurujkLMOM0/YBd+rL2rlwe6TS9nxeelp3PLoo1B+YNKkxymmlvKXjPAoLc0FzmDESSSa7E1hxWGAxo4IIzC7/CsL3Ah4GvJN4ZN/1J5kRvdJZpRWWe5xSACepcpmkW4DovtHIcHsuysRZgDDApBZNcqG1UbYXwmu0koW4yGwU0dzVlzWKr4/aIxWqHmZYiuGNdRH5z0helYxv2gcdOaswOc8tWxfhpGfHfTfCT0L4B

「VRC」→「PlayerApi」→「get isMaster」

is_master

int playerId「プレイヤーのPlayerID」​

VRCPlayerApiのプレイヤーのPlayerIDを取得します。

似たような関数として、VRCPlayerApi.GetPlayerId(VRCPlayerApi player)がありますが、基本的にはこっちを使うとよいです。

(この取得方法だと結果をキャッシュしてくれます)

例は、Startイベント時に、_myPlayerId変数に自分のPlayerIDを代入する処理です。

application/vnd.unity.graphview.elements AN1V3WrbMBh9laBrK8jWf6AXa7tB6OjKsuVmBCPJcvHq2MWW24W0T9aLPdJeYV+aNP1lM90CY5YR9idZ/s6Rzvl+3HxfogtTdh6NvixR3pXlsZnDC5qapjC29Olk0QY/H1eBJihCXZHBoKU605ZxzCQnmCXcYJvJBHsvnaZSGgjB5PO6LUJRV2i0RN/QCMdMsKEghGgpuEh4hBYQFRCEGBExoTzmgl5HqKoz/3l82EJWCBa6v2cRysv6cjM2W8+crgC0twi6qgiLD/ard2G6hrVERdUGUzk/PkQjAou3oSmq080wQtfRaz5b0zKc3Aajwbx1dVMWNhpMfdMC5j0AtWrR4KArQ9f4vcp3oTFlNDjpbFm4I7/4VJ/5as8CX9xxEWvKPFH6Kp0vTkqz8M04+7Pk9uu69Kb6u9m9M2Xr/8+8drGZVV1BVrNVXg/U9fbCVyGdBNOEraiEADERznBilQRRxQ5r7hw21CuVe60Z1S+JSuhhzFeiijlPJGUbWXE11KsroZIIWFY+ltVjISENf7GKJ5hqlmNGncVKg6KFdY7SGLBwip7K7Smq6ceDyeHRvmn9sQ+XdXMGbA7T9NSH9H3tTLk+1Wl6Pw+e1sE358WWCOKU515k2IKbYOYcAQ4yhTOaEZYIS2Oe9Cdiw4NiksVJTDT7FQ/9ET7MfIPxfCPa9EXPJLGSxDCJM2HBOLUlWFuR48wJwpTIXU7oc1T81i+FjKmCTslemHoxeEV2YqZPGZsAMXe1ZMtFr9P2jIu7DU4YixnZ1o/fHPRV2ejDPfCxk/qyQ2/pVYZf54j/rsHPoP0E

「VRC」→「PlayerApi」→「get playerId」

player_id

メソッド​

bool IsPlayerGrounded()「プレイヤーが接地しているか否か」​

プレイヤーが接地しているか否かを取得します。

例は、カスタムイベントCheckIsGrounded時に、_isGrounded変数に自分が接地しているか否かを代入する処理です。

application/vnd.unity.graphview.elements AN2VW2/TMBTHv0rl57iyHTu2K+2BdYCqoTFR6AuqIl9OR1iaTLlsVN0+2R74SHwF3GZ3NqgGlSbiPMTHl/zP8fkd/7j8vkSnJm8BDT4v0azN8wMzDx00MVVmbA7peFE3MN8tyxxMgSLUZj4Mey2po8phIZIZ5kJ4bCEBnHBruWUkJjMWJp+UddZkZYEGS/QNDbBMVJ8IQrhSTFEmIrQIVqZVX4cn0Vwxzqi+iFBRevg02quDLhQ2un2nEZrl5dnV2LSbOVm5UK99aIusWby3X8E1k86xJcqKujGFg9EeGpCwed1UWXF0NYzQRfScZV1g+uO1MerNa1dWeWaj3gSqOvi8w/tk1aLesM2btoKdAtqmMnnUO2xtnrl9WHwsj6HYsVIa4URCdcyBKH2eZvXbqmwLD/7vxF0d279V98bkNfyfurZxmEVZBFXTla67fH0Yjvf2d00NB9CcldVx+G8/TY+gSd+VzuSHuVlAlaa388JXZ3x1kt1wSJwCAUmgTzqNuXMEm9gr7GNPOEtsTMVjHFIl+4QFEDUVgsmYdyRK0Q82EtYIJZUmyX0Qf4/eQw/HwZXrKnKj1xIrw+Yaz2JOMdcccJAAOFbxjLlYMMbtr3o7uVwncbyWxZKucPxB76peWO0o1dRgY63EXGmOFRCOvfEAFoB7Kc/JdgrLFpNqo/r7PBReLtlPM3SXjUDRqO5610U0feIW2yQ5HqOHreFhnFMeknEjdjYiNSTiNq63h3F7fQpFkw7buinnN7FwnpnYSr+KwEqfp9gaYrCgPk4SLUzC9eaVZIUmD1e6lJRSRRP+kMz7fm5WF144k8Mv4I5Hd27uaWg/AQ==

「VRC」→「PlayerApi」→「IsPlayerGrounded」

is_player_grounded

bool IsOwner(GameObject obj)「GameObjectのOwnerか否か」​

指定したGameObjectのOwnerか否かを取得します。

Owner:オブジェクトの同期を行う権限を持っている人。Networking.SetOwner(VRCPlayerApi player, GameObject obj) で変更可能。

自分がOwnerかどうかは、 Networking.IsOwner(GameObject obj) というメソッドでも判定できます。

例は、カスタムイベントCheckThisOwner時に、_isThisOwner変数に自分がこのUdonがくっついているGameObjectのOwnerか否かを代入する処理です。

application/vnd.unity.graphview.elements AN2W2W7TQBSGXyWaa48125mlUi8gBVSBAFHIDYqsGfukmDo28kKJCk/GBY/EKzBZmi60VQSthIhzkczi/P8/53zxz+8/zshnXw1I9t6fkdlQVS/9PH4hE9+WPlSYHS26HuePm6ZCX5OEDGURpwtneM5tTgH0jCqAggbUSLUKQQXBJJuJuPhT05V92dRk74x8IXtUgLYpABNOOG0NJGQRR52VqXbOAeeGx9FvCambAt8dHnRRFon3uXhPEzKrmtPN3HS9crJ00K0sDHXZL16Fj5j3k7WvM1LWXe/rHA8PyB6LN+/6tqyPN9OEfEv+ZNs6l/RoNZiM5l3etFUZktEE2y5a3lcpW17JaDxU/dDifo1D3/oqGb0eQlXmz3HxtjnBej8Y4yEHzZ1UyKz7mpXd2w9l9+q0xvbv1G2O7X7lPfVVh/+nroc4zbqpo6rpUtfl/nozPjp4/th3+BL706Y9ib+bZtkx9tmLJvfV68ovsM2yi3Xx03rw0ady24cstwioY/eZ3FGV54x6WVhayIIpoYPkcGMfcpaCAc6kAWc0aLnqRJ5KEZvTKA029jAX+mor3t181y0++Yx1n42Hrm/mW8F5IbwMpqAW2VJwwWnwzFPghdTagdfK3QgOmXIRBWvLoyWpztFhUm5URIcSQmop7HV2XJVMAgtGgHV0JhWnyimkjgNSaeVM5BKEUIHcB1UesKDGHzA/uQSI67kfxRo6x/c2952M/5b7JnamY6UABy30jrEnBEAWQaCjzhlDldU+HjkK6jxf6vDcWf2VPQzSHzD8nf74/oxB/y5Sd4TX4boib4NW9m7p7Ul9XNb4LN5o7TK75Qljl/q5ARQRbNoAM9EBmCXCzkGxGo7HA9yAsVxeq9hdQLoqV1fYgscXZV5FXTxu8UJoisByhx4goI0L/5nnlN9Pb9zEDdkSINuwdzF1U9igVlQWgl3KegWHy1nfzeT7yWYar18=

「VRC」→「PlayerApi」→「IsOwner」

is_owner

bool VRCPlayerApi.IsUserInVR()「プレイヤーがVR環境か否か」​

プレイヤーがVR環境か否かを取得します。

例は、Startイベント時に、_isInVR変数に自分がVR環境か否かを代入する処理です。

application/vnd.unity.graphview.elements AN1V207bQBT8lWifvdbeL5F4KNBKERVFpOSliqzd9TFyMTayHWgU+LI+9JP6C90QoAUCiihIVW0/2HvTnDkz45/ffyzQuatmgIZfFqiYVdW+O40faOLa0vkKsvG86+F0u2kqcDVK0KzM43RuNQ3UBCylKrCQMsceFGAlvBeeEU4KFhefNV3Zl02Nhgv0DQ0xF5qlRhJppOVaJmgeBymjLFXWWkmppkbLqwTVTQ5Ho90uwkLxnN/PNEFF1VzczE1XKyfLCrrrEmZ12c8/+a8Q+smqrgUq6653dYDRLhqSeHjXt2V9fDON0FXykm0rXtLx9WAyOO1C01alTwYTaLtY8pZIyfJOBjuzqp+1sFXDrG9dlQwOZr4qwx7MPzcnUG95rZ0MUlHLBRBjL7OyG9WTw78DdtOx10X2wVUd/J+43qKRdVNHVNMlrj+sNYY+u7XXnaE88ZpJY3HBBcXCCsCWSsDc8IIFLhkT/rGhGNEplYQYKYRl0TtqZSkpU7K8tGKWWyH5Y0vxuBdobjFTRGEBzmJnbY5FTnguqNemKC7J21juDSnfKJheJpR/V/cPFTY53Bnv7m27DuLbQeXm0L47K9MsG3VHHbTLcMmeCPZNZLEm2BlNWUxwo7VlVpnbaJcilc/pkAQDElTskQ4WixAIdjw3OOc5EUx5TiWLIryvwM288jq/hqeZ3Yf+omlP4urI63G09McmuGpFdpat78Ady5vUvY7laHcSCVWCGGWpIPqa5qXb7xP7vGUfFvX+HOo+G/eu7e8QWu1VgAipkExjQazEnkaicwMk0GApM2vyCD8ZSM8L4UGDNxLh46qmV78A

「VRC」→「PlayerApi」→「IsUserInVR」

is_user_in_vr

TrackingData GetTrackingData(TrackingDataType tt)「プレイヤーのトラッキング情報を取得」​

プレイヤーのトラッキング情報を取得します。

対象が自分自身の場合はヘッドセット/トラッカーからの情報が使われるが、自分以外(リモートプレイヤー)の場合はアバターのボーンの情報が使われます。 (=自分以外の場合は、アバターのボーン軸の向きによって正面が変わるので扱いづらい)

TrackingDataType ttの一覧​

  • Head → 頭
  • LeftHand → 左手
  • RightHand → 右手
  • Origin → VRのプレイスペースの中心 or プレイヤー位置
  • AvatarRoot → アバターの一番親のGameObjectのTransform(=FBTの時は、AvatarRootの正面と実際の顔の正面は一致しない)

戻り値のTrackingDataからは、位置(position)と回転(rotation)が取得できます。

例は、Updateイベント時に、_td変数に自分のトラッキング情報を代入し、_headPosition変数に自分のトラッキング情報の位置のデータを、_headRotationに自分のトラッキング情報の回転のデータを代入する処理です。

application/vnd.unity.graphview.elements AO1Y21LbVhT9FUav9dGc+4UZHpqQppl0UhrAL4HxnJuoGiExshziAF/Wh35SfyHbV8AyQaUwIQy2xz62jqx9WWvtvfXv3/+cJZ9sMYrJ5oezJBsVxTt7DF+Svq1z64o46L9/ubv99oUdRljtFHYc659P8r3a+o95ebRtG5v0klEe4BzNXTA6kyjIEBHHWiKtMUbcMuKdJU7hDDafVMO8yasy2TxLPiebiGLBUtFLxrBWjKcGHkwbyTVn+qKXlFWI+2+2h2BiAqdfvg57SVZUp/Njh7Od/Yk3w6k7ozJvxr+7v6Jv+jMfz5K8HDa29PHNdrKJ4c+HTQ1uzA8nyUXvLqftjodNPE53pz/2No6HvqqL3PU2+rEegqdbPMWTZ2/j5ahoRnXcKuOoqW3R29gZuSL3b+N4r/oYyy2nlBVeSGIYj1ib80ET/p9RL6qqiLa8X6t+scUwPk27HiKJZVWCVYcTu9ZRbH9i66vyKC9jH+ytaraklDGE2CxoxIODNwKUcko4JAmzghOXGcufKfUfKfVntGFnEbEnCeLHatf3JdcfI9vEupxkfcEvp6yM0SgkvZKIG0aQUZKgwDGNPMPGOPbMrzvw633V2Gd+PV1+vfoUy2awfxKAUpcNoLeZdB7ow2KAkiUV0sJwRDSjNHilFMNr2MQVTzkwSBquKafEzIhFOJsSS8NxQgk24jqzrnMpgSsbbTBcV0WDuFcESmUwyDsidCTKeZMlq4xbdWs3NoOFdCzd6vTPbbeEnnq10AUlurk10Qn4EXsHF7OYgCxZHZD2PEMskwquSEnmxTluC0pihdZUB9juoEvgkltowTOFWDBcCKIJ0e0gPDLAdRoj7kaTx8v6Vv1ajl3vYnNa1ZNhKx0MjgCfv1XeFrNJbHDDeHZZ3xy0jFRYxFwQEzxoZLjMkNOa6WC1YSLcwEg2YSRjCpAvqZphl4spdAWnlElGNfkWI2/j2nrTwcnXsbk6X97k5NU9e+OT2GXfMjBdGLYmMAyTFAOrtVKGGgkf88DIawqm1WoX0CUR6xj9HVsEiGE6D2d6NZ4/rQYeaLAM/CUlSFdKlACJ81+hZ2izYK0cd9K4VuoIQHpFgZfKLNsKHGMQ3hODJAuAD4Upci7LEHYOWkKYvLDmaxVYee+pZgGFwME6YT2yABVEMyYjDpm2zD12Be40dT51BX69DnvOEIk5ZBdKN8BCEIWMUxxhgET0JCoi1s3jIAipwlrBVMGWnYAEhsCDCCr0VGVXUXj/SvCjVu1upeOqLs1r5SIRg2/dZOnC9XZScdotjV0gA0py/8nupN/3od1nB8vYHIBZB8nng0l4cO8gGS9XX2arC1jW89nw1s2wOp2fdtGxOHSS31Yu+dXiwCdWrtYDrkRUTFpEA4YsQr1GlrCIRAbokDYYKchD1e8HZG2n+x9PXek7q8kCuINb7ip1AUsbhFRev5E07y1vnRepVoYZZ5CKGUE8A+VySlLkYbfHxAUW7LPA3EFg1nYAXaLdzq3EqVFQG7jhhMM8Jbql9scSkwduAQ4vvgI=

「VRC」→「PlayerApi」→「GetTrackingData」 「VRC」→「PlayerApiTrackingData」→「get position」もしくは「get rotation」

get_tracking_data

void TeleportTo(Vector3 teleportPos, Quaternion teleportRot)「プレイヤーを指定した位置・回転でテレポートさせる」​

注:対象が他人(リモートプレイヤー)の場合は動作しません。

プレイヤーを指定した位置・回転でテレポートさせます。

Network Update中のテレポートについて

Network Update中(OnDeserialization、FieldChangeCallback?)にテレポートしようとすると、バグで体が取り残される可能性があります。
UdonBehaviour.SendCustomEventDelayedFrames 関数で1フレーム処理を遅らせることで対処可能です。
https://creators.vrchat.com/worlds/udon/networking/#debugging

例は、カスタムイベントTeleport時に、Public変数teleportPointの位置・回転に自分をテレポートさせる処理です。

application/vnd.unity.graphview.elements AO1Xy27bRhT9FWO21RDzfhjworHSIkibuLWjTW0Qw+HQYENzDD7iKLa/rIt+Un4hVxItKZbQqrEdeFFQixE5nDn3nnPPHX7+6+9r9MFVfUD7f1yjoq+qN+4C/qCJa0qXVSF9V5fd9GV9XtbhpHF1W8TmAo1QX+YwS1nNKLEea58xLIwqsHW6wCQvPKNaM8cYTL6MbdmVsUb71+gj2sfMWJFISZhlVhktR2gKdylTJNGWcWm4NYJreTtCdczDu1fjFvAhWGn1OxuhoopXw7OzxczJLJR2Hks/w/02+zP4brII8BqVddu52odXY7RPYPG2a8r6fHiM0O3oW147nrZduEiO5zdHexetj01VZqO9SWhaCPpAJGR2jfYO+6rrm3BQh75rXDXaO+qzqvSvw/Qkvg/1Qaa1k14qarkIxNibLlThMjbdUSzr7mHwXsRYBVc/Lr6TBrZ4frB+clX7QFxPwWYda0B1NsO1VmgvP4S6Sw/7touruvJMqjwLATuqKBZSK2w8z7Dk1FgPhcUd2VZXjCZKS0INp0QKZcxQWVwmhDMiOCxFOBTa/cr6upoQYVDX0hGcGwv760JjZ7MCBy0LGzJVSFqgx6i5J0z3yVA8mymf/H54PH79wrXhTeiuYvMe9k7S9Dx06S/Ru+qoctPQpOlqHowWN3+8LJckOdjSF1RgyJTEQjGNLTMC26IQhVECrE1tIYlakggmLAOmtKFscD/JEgoUEa6NoNoq+zVF/2x39yP8GUK5c/AlXmoKlnlusWecY+G4xpkNFGdEae+Cl4LLbaKSJAGUhBNJ54j5HLAwiQKchtiFpDbM+vEN+gnFslMj+zZH2dTftpY66O8u+el6353AZrHhSyIzbWXmJcdUBINFls3AEoIDN0YwmWsTxBYi1Ux3kghj2FJ2wKJRsBxYgxXgLszco3EX0dyQJ+nGO4k6D2BOAfwxFxbwGQ65CELjnFkLcrWFd9k2UYMj0k2npFLP87FU9b8Y5f+q3knVTezchqp/610XmnpGyvI4WQSbCc0w0zJgkVuGjQWdK+iHxHkmoIFtIVPIubCXXOp1Mg2hVGihiOX3tb2Ldr6Ttre3GkjfXRc7idssYXs+03ShqUmErN7ldqeWvpHbwfyHY8SQUEGtZdRsnM93aYg3s3PLLgY2n7iLIOYTn9UXwRopyUDUaG/95mFswq8x76uwqnKya5XXoJqb61P08RT2hhdO0XQ5+rQY3T4C8JWcvi92GF09LAqooGQopgTG6bEPdRiH1jflJXDxw/Glu6rfNiWcu+euBHEsq28VE/1PMY1D4WDe8/0YOoPrCw==

「VRC」→「PlayerApi」→「TeleportTo」

teleport_to

Vector3 GetPosition()「プレイヤーの位置を取得する」​

「VRC」→「PlayerApi」→「GetPosition」

プレイヤーの位置を取得します。

get_position

Quaternion GetRotation()「プレイヤーの回転を取得する」​

「VRC」→「PlayerApi」→「GetRotation」

プレイヤーの回転を取得します。

get_rotation

Vector3 GetBonePosition(HumanBodyBones bone)「指定したボーンの位置を取得する」​

Quaternion GetBoneRotation(HumanBodyBones bone)「指定したボーンの回転を取得する」​

void EnablePickup(bool enable)「ピックアップをできない/できるようにする」​

void SetPlayerTag(string tagName, string tagValue)「プレイヤーにタグを設定する」​

タグは他のプレイヤーに同期されません。

void GetPlayerTag(string tagName)「プレイヤーのタグを取得する」​

void ClearPlayerTags()「プレイヤーのタグをクリアする」​

void SetRunSpeed(float speed)「プレイヤーの走る速度を設定する」​

0から10の値を設定する。

注:対象が他人(リモートプレイヤー)の場合は動作しません。

ここら辺は、SDKについてくる「VRCWorldSettings」からも設定できます。

vrc_world_settings

void SetWalkSpeed(float speed)「プレイヤーの歩く速度を設定する」​

注:対象が他人(リモートプレイヤー)の場合は動作しません。

0から5の値を設定する。

void SetJumpImpulse(float impulse)「プレイヤーのジャンプ力を設定する」​

注:対象が他人(リモートプレイヤー)の場合は動作しません。

0から10の値を設定する。

void SetGravityStrength(float strength)「プレイヤーにかかる重力を設定する」​

注:対象が他人(リモートプレイヤー)の場合は動作しません。

0から10の値を設定する。デフォルト値は1。

月の重力にしたいなら、(月は地球の重力の約1/6なので)0.166を指定すればよい。

void SetStrafeSpeed(float speed)「プレイヤーの横に動く速度を設定する」​

注:対象が他人(リモートプレイヤー)の場合は動作しません。

0から5の値を設定する。

float GetRunSpeed()「プレイヤーの歩く速度を取得する」​

注:対象が他人(リモートプレイヤー)の場合は動作しません。

float GetWalkSpeed()「プレイヤーの歩く速度を取得する」​

注:対象が他人(リモートプレイヤー)の場合は動作しません。

float GetJumpImpulse()「プレイヤーのジャンプ力を取得する」​

注:対象が他人(リモートプレイヤー)の場合は動作しません。

float GetGravityStrength()「プレイヤーにかかる重力を取得する」​

注:対象が他人(リモートプレイヤー)の場合は動作しません。

float GetStrafeSpeed()「プレイヤーにかかる重力を取得する」​

注:対象が他人(リモートプレイヤー)の場合は動作しません。

void UseLegacyLocomotion()「ロコモーションを古い形式に設定する」​

void Immobilize(bool immobile)「プレイヤーを動けなくする/動けるようにする」​

注:対象が他人(リモートプレイヤー)の場合は動作しません。

void UseAttachedStation()「プレイヤーをUdonがくっついているGameObjectの椅子に座らせる」​

Udonが追加されたGameObjectに、VRC_Stationが必要です。

void SetVelocity(Vector3 velocity)「プレイヤーに速度を与える」​

Vector3 GetVelocity()「プレイヤーの速度を取得する」​

void PlayHapticEventInHand(PickupHand hand, float duration, float amplitude, float frequency)「コントローラーを振動させる」​

VRCPickup GetPickupInHand(PickupHand hand)「プレイヤーが指定した手に持っているものを取得する」​

void SetVoiceGain(float gain)「プレイヤーの音量を大きくする」​

0から24の値を設定する。gainの単位はdB。デフォルト値は15。

void SetVoiceDistanceFar(float far)「プレイヤーの音の減衰を設定する」​

0から1,000,000の値を設定する。デフォルト値は25。

0にすることで、プレイヤーをミュートにすることができる。

void SetAvatarAudioGain(float gain)「アバター音量の上限を設定する」​

0から10の値を設定する。デフォルト値は10。

これより下は、誰も使わなさそうなので、説明を省略します。

もし詳しく知りたい場合は、以下のページを参照してください。

https://creators.vrchat.com/worlds/udon/players/player-audio

void SetVoiceDistanceNear(float near)​

void SetVoiceVolumetricRadius(float radius)​

void SetVoiceLowpass(bool enabled)​

void SetAvatarAudioNearRadius(float distance)​

void SetAvatarAudioFarRadius(float distance)​

void SetAvatarAudioVolumetricRadius(float radius)​

void SetAvatarAudioForceSpatial(bool force)​

void SetAvatarAudioCustomCurve(bool allow)​