获取玩家
这些节点用于获取单个玩家、一组玩家或所有玩家。
Networking.get LocalPlayer
VRCPlayerApi
请注意,此函数是 Networking 类的成员,但在此处包含。
本地玩家是此 Udon 脚本当前正在其上运行的玩家——或者说,本地玩家就是你。认识自己非常重要!
GetPlayerCount
int
获取调用时房间实例中的实际玩家数量。
GetPlayers
VRCPlayerApi[]
这是获取世界中所有玩家的方法,以便你可以在 For 循环中遍历它们并应用设置、进行更改、查找特定名称等。
最简单的方法是使用不接受任何参数的版本。
- Udon Graph
- UdonSharp
![GetPlayers 调用的最小实现。更好的方法是将 VRCPlayerApi[] 构造为变量以便重用。](/creator-docs/assets/images/graphgetplayers_alloc-fd1ad16b908bd86884ba94833d304e23.png)
VRCPlayerApi[] players = VRCPlayerApi.GetPlayers();
for (int i = 0; i < players.Length; i++)
{
VRCPlayerApi player = players[i];
// 对玩家进行操作...
}
上面的方法有效,但每次使用都会分配内存,这意味着它每次都会重新构造 VRCPlayerApi 数组。
如果你经常使用此方法(例如每帧),则应改用非分配版本,即传入存储为变量的 VRCPlayerApi 数组以便每次重用。使用此方法需要注意的一点是,如果世界中的玩家数量超过数组容量,多余的玩家将被遗漏。为支持动态玩家数量,你可以使用下面演示的技术,初始创建具有预定大小的数组,然后当世界中的玩家数量超出数组大小时根据需要扩展。
- Udon Graph
- UdonSharp
![定期使用 GetPlayers 的更高效模式。此方法将 VRCPlayerApi[] 构造为可重用的变量,仅在世界中玩家数量超出容量时才构造新数组。](/creator-docs/assets/images/graphgetplayers_nonAlloc-05194c3231dc0043d4a5c2158c293b2d.png)
private VRCPlayerApi[] playersArray;
private void Start()
{
playersArray = new VRCPlayerApi[10]; // 初始容量为 10 个玩家。
}
private void Update()
{
int playerCount = VRCPlayerApi.GetPlayerCount();
while (playerCount > playersArray.Length)
{
// 持续加倍容量,直到数组足够容纳所有玩家。
playersArray = new VRCPlayerApi[playersArray.Length * 2];
}
VRCPlayerApi.GetPlayers(playersArray);
for (int i = 0; i < playerCount; i++)
{
VRCPlayerApi player = playersArray[i];
// 对玩家进行操作...
}
}
GetPlayerById
int
获取给定玩家 ID 对应的 VRCPlayerApi 对象(如果存在)。
get playerId
int
获取缓存的 PlayerId,如果尚未缓存则调用 GetPlayerId。
GetPlayerId
int
从源获取玩家的网络 ID。
玩家标签系统
此系统是一种快速简便的方式,可以将字符串分配给玩家,而无需创建自己的变量和集合。
SetPlayerTag / GetPlayerTag
设置:string, string
获取:string
设置稍后可以查找的字符串变量。例如,你可以将烹饪游戏中玩家的"角色"设置为"厨师"或"顾客"。然后你可以为"role"调用 GetPlayerTag 并返回"厨师"或"顾客"。
ClearPlayerTags
VRCPlayerApi
移除你在玩家上设置的所有标签。
GetPlayersWithTag
当前无法使用。返回一个 List,但在 Udon 中不可用。
你将能够传入一个 VRCPlayerApi 对象数组和一个标签,该方法将使用设置了该标签的玩家填充数组。