Skip to main content

玩家

与 CyanEmu 相比,ClientSim 中玩家的表示已被拆分为许多组件。每个组件处理玩家的不同方面。下面您可以看到本地和远程玩家预制体的层级结构。 本地玩家层级结构远程玩家层级结构

ClientSimPlayer​

ClientSimPlayer 类是包含玩家所有系统的容器。虽然本地和远程玩家都有 ClientSimPlayer,但仅为本地玩家初始化。远程玩家的所有系统都留空,除了化身和 VRCPlayerApi 可变数据。ClientSimPlayer 是玩家预制体顶层对象上的第一个组件。在检视面板中,您可以在运行时查看和修改 VRCPlayerApi 数据,例如移动设置和音频设置。

TrackingProvider​

TrackingProvider 接口是一种定义如何控制玩家追踪数据的通用方式。抽象类 TrackingProviderBase 提供头部、手部和游戏空间位置的数据,还根据头部高度确定玩家当前姿势。追踪提供者可以缩放以将玩家相机向上或向下移动,帮助测试各种玩家化身场景。它将监听 PlayerHeightUpdate 事件并根据请求的玩家高度计算新的追踪缩放比例。默认化身高度为 1.9,代表 TrackingScale 1。由于此类是抽象的,必须扩展才能在 ClientSim 中使用。目前 ClientSim 中仅包含 DesktopTrackingProvider。在 ClientSim 中实现 VR 需要新的 VRTrackingProvider。追踪提供者预期是 PlayerController 的子级,但在实现 VR 时需要重新考虑,因为游戏空间 x/z 偏移不会应用到玩家控制器。

DesktopTrackingProvider​

目前 ClientSim 唯一实现的 TrackingProvider。此追踪提供者将手部位置相对于相机锁定。相机高度基于蹲伏和俯卧输入事件修改。在每帧上,此追踪提供者检查视角输入变化并更新相机的 x 旋转(上下)。如果玩家坐在载具中,则头部 y 旋转被解锁以允许玩家左右查看,最多偏离游戏空间旋转 90 度。

PlayerController​

PlayerController 现在仅控制玩家的移动。在 CyanEmu 中,PlayerController 类包含与玩家相关的所有内容。现在这些系统已被拆分,使 PlayerController 专注于简单地处理玩家的移动。每帧,控制器将检查移动输入以及 TrackingProvider 姿势,以了解玩家在该帧应该移动多少。