版本匹配
我们使用语义化版本来管理 VRChat 包管理器 (VPM) 中的 SDK 包,而不是 .unitypackage 格式中使用的基于日期的格式。本文档显示了最新 SDK 版本的两种版本之间的匹配。
3.2.0
概述
添加 DataContainers,PhysBones 1.1 (‘Squishy PhysBones’),AsyncGPUReadback 等。
特性
**DataContainers!**为 Udon 提供列表,字典和 JSON!
- 添加了 DataLists 和 DataDictionaries,为 Udon 提供了类似于 Lists 和 Dictionaries 的功能。
- 列表和字典通常需要支持泛型,而 Udon 不支持它们,所以这是通过首先将您的数据放入 DataTokens 中来完成的,这些 DataTokens 能够存储任何值。
- 添加了 VRCJSON,一个帮助类,可以将 JSON 字符串 (例如从远程字符串加载接收到的) 转换为 DataLists 和 DataDictionaries,反之亦然。
- 阅读 Data Containers / VRCJSON 文档页面以了解更多。
- 添加了 DataLists 和 DataDictionaries,为 Udon 提供了类似于 Lists 和 Dictionaries 的功能。
**AsyncGPUReadback!**这允许您从 GPU 和着色器读取数据,而不会产生重大的性能损失
- 添加了
VRCAsyncGPUReadback.Request函数和相应的OnAsyncGpuReadbackComplete事件 - 这些可以在不产生太大性能影响的情况下,将数据从 GPU 读取到 CPU 内存中,但需要延迟一帧或更多帧的数据
- 查看 ASyncGPUReadback 的文档以获取更多信息。
- 添加了
改进
- **Squishy PhysBones!**您现在可以实现 PhysBones,它们可以 “squish” 或压缩,而不是拉伸!
- 要设置 Squishy PhysBone,将您的 PhysBone 组件切换到版本 1.1 并调整 “Max Squish” 值。
- **所有的 PhysBones 现在都有版本了!**您可以在 PhysBone 组件中更改版本。这样做是为了让我们能够安全地添加新功能。
- 旧的 PhysBones 自动在版本 1.0 上。1.0 包括 SquishyBones。
- 重力和刚度的变化在版本 1.1 上。下面还有一些其他的变化。
- **所有版本都将得到维护。**1.0 不会被弃用,但它是功能锁定的,不会添加新功能。每次我们添加一个新的 “破坏性” 功能,我们都会增加版本。
- PhysBones 1.1:重力和刚度的行为不同,如果您从 1.0 升级,需要新的值。
- 重力现在是骨头在静止时应该直接指向世界空间上/下的比例。
- 刚度现在是骨头试图保持在其先前方向的比例。
- 以前,这些值是您需要与拉力因子平衡的直接力。我们认为这应该更直接,更容易使用。
- 这些变化也是为了支持添加到组件的新功能所必需的。
- **已添加 Max Squish 值。**这是骨头可以缩小的百分比。
- 已添加
_Squish参数。它的工作方式类似于_Stretch参数。
- 已添加
- PhysBones 1.1:**已添加 Stretch Motion 值。**这是运动影响骨头拉伸或压缩的比例。
- 现在可以折叠 VRCPhysBone 组件 UI 中的值类别。
- 类别还包括一个帮助按钮,它将带您到该主题的在线文档。
- PhysBones 文档将在 PhysBones 1.1 和 Squishy PhysBones 的公开测试期间更新。
- 网络 ID 工具现在适用于 Avatar 项目中的 PhysBones
- 这个工具允许在不同平台上的虚拟形象之间同步 PhysBones,即使它们有不同的 GameObject 层次结构
- 这个高级工具只有在您的 PC 和 Quest 虚拟形象有不同的层次结构时才有用!
- 如果您不知道为什么要这样做,您不需要担心这个。
- 查看完整文档以获取更多信息
- 这个工具允许在不同平台上的虚拟形象之间同步 PhysBones,即使它们有不同的 GameObject 层次结构
自 3.2.0-beta.1 以来的变化
- 重新添加了一些被移除的公共方法,包括
GetOrAddComponent- 这些现在被标记为
[Obsolete],请确保迁移不再使用它们,因为它们将在以后的日期被正确地移除
- 这些现在被标记为
- 修复了在 Unity 中抓取 PhysBones 的一些问题
- PhysBone 的拉伸不再被限制
- 这恢复了之前的行为
- DataContainers:修复了在使用
Add后GetKeys和GetValues返回错误值的问题
SDK API 变化
我们正在努力记录 SDK 的 “公共 API”,这将保证在小版本和补丁版本之间不会改变。与此同时,这里有一些自 3.1.13 以来发生的变化:
扩展方法
我们已经将一些扩展方法移动到 VRC.Core 命名空间。 如果您正在使用 Transform.Reset() 方法,您应该改用 VRC.Core.ExtensionMethods.Reset(Transform t)。 以下是您应该做的其他类似的变化:
Transform.GetHierarchyPath>VRC.Core.ExtensionMethods.GetHierarchyPath(Transform t, Transform relativeTransform)Transform.GetShortHierarchyPath>VRC.Core.ExtensionMethods.GetShortHierarchyPath(Transform t, Transform relativeTransform)GameObject.GetOrAddComponent>VRC.Core.ExtensionMethods.GetOrAddComponent(GameObject go)Type.GetFriendlyGenericTypeName>VRC.Core.ExtensionMethods.GetFriendlyGenericTypeName(Type t, bool includeNamespaces)
程序集移动
PhysBoneGrabHelper 已经移动到其他程序集,您可能需要在您的代码中现在引用 VRC.SDK3A 程序集。这里有一个修复示例。
不适用于公共使用的变更
此外,我们对以下类进行了一些更改,这些类并不被视为 SDK 的公共 API 的一部分,您应尽快停止使用它们。 我们将在五月底前发布一份列出我们 SDK 中所有排除项的文档。
ApiCacheEditorVRC.Core.ApiCacheVRC.Core.ApiCache.CachedResponseVRC.Core.ApiCache.CacheEntryVRC.Core.ApiFeedbackVRC.Core.ApiFileVRC.Core.ApiModelVRC.Core.ApiModel.SupportedPlatformsVRC.Core.APIResponseHandlerVRC.Dynamics.PhysBoneManager.BoneVRC.Dynamics.PhysBoneManager.ChainVRC.Dynamics.PhysBoneManager.PhysBoneJobVRC.Dynamics.PhysBoneManager.PoseVRC.Dynamics.VRCPhysBoneBaseVRC.SDK3.Dynamics.PhysBone.VRCPhysBoneEditorVRC.Udon.ClientBindings.UdonClientInterfaceVRC.Udon.Security.UnityEngineObjectSecurityBlacklistUdonManager 将有部分属于公共 SDK API 的部分,但对 ‘黑名单’ 方法进行了更改,这些方法不应直接使用。
3.1.13
概述
修复了与 Avatars 3.0 Manager 的兼容性问题。
Bug 修复
- 将 VRC_AvatarParameterDriver 中的 ‘hasInitialized’ 字段名称恢复为 ‘initialized’,以避免破坏任何期望此字段名称的现有包。
3.1.12
概述
为 Udon 提供了新的 VRCGraphics 功能,新的虚拟形象性能指标和 bug 修复。现已与 VRChat 2023.1.2p4 同步。
新功能
- 约束现在在虚拟形象的性能统计中被计数。它们目前不会影响您的性能排名。
- 为虚拟形象添加了对 “VelocityMagnitude” 动画属性的支持。
- 为 VRCPhysBone 添加了 “Snap To Hand” 选项。启用后,抓取骨骼时,它会对准用户的手,否则抓取会有偏移,除非被拖动,否则不会初始移动。
- 为 VRCPhysBones 添加了 “Reset When Disabled” 选项。启用后,当组件被禁用时,骨骼将重置到它们的休息位置。
- 在 VRCPhysBones 的各种权限中添加了自我/他人过滤。
- 允许碰撞
- 允许抓取
- 允许摆姿势
- 纹理 VRAM 使用现在计入您的虚拟形象的总体性能评级。
- 添加了设置虚拟形象参数以不同步的能力,解决了从表达菜单控制不同步参数的问题。
- Udon 现在可以访问临时 RenderTextures,以及通过 VRCGraphics 为 RenderTexture,Texture2D,Texture3D 和 Sprite 提供构造函数。
Bug 修复
- GraphicsSettings 只在进行更改时保存到磁盘,以防止不必要的缓存破坏。
- 修复了在启用 isAnimated 时可能导致 PhysBones 抖动的问题。
- 当连接丢失时,重新连接到 Creator Companion。
- 确保 UdonEvent 从主线程调用。这避免了当图像下载失败并且 UdonBehaviour 尝试使用 Unity API 方法时出现的意外线程错误。
其他更改
- 在 UdonBehaviours 的 OnDeserialization() 方法中添加了 OnDeserializationResult 参数。这使您能够查看此数据发送和接收的时间。
3.1.11
从这个版本开始,我们将不再发布解压到您的 Assets 文件夹的传统 .unitypackage 文件。此页面将作为 SDK 的更新日志!
概述
添加了远程字符串加载、远程图像加载、MIDI 播放和模拟时间功能!
新功能
- Udon 现在可以加载远程图像。关闭了这个 Canny
- Udon 现在可以加载远程字符串。关闭了这个 Canny
- Udon 可以播放 MIDI 数据,与音频同步。
- Udon 现在可以访问玩家和具有网络功能的 GameObjects 的模拟时间。
- OnDeserialization 现在包含 DeserializationResult。
Bug 修复

- UdonBehaviours 的 Unity 检查器现在会检测缺失的
VRCUrlInputField变量,并提供重新加载 SDK 的选项,以防这个组件没有正确加载。关闭了这个 Canny。(这是一个已知问题,将在我们可以升级到 Unity 2020 或更高版本时修复。) - 修复了在从通用切换到人形骨架时,虚拟形象描述符中 FX 层重复的问题。
- 修复了 Unity 无限重载程序集卡住的问题。
- 将您可以从 SDK 窗口进行构建和测试的客户端数量限制在最少 0 个和最多 8 个。
其他更改
- 添加了
MidiPlaybackExampleScene.scene和相关资源以演示 Midi 播放。 - 在
UdonExampleScene.scene中添加了一个简单的远程图像加载器。 - 加快了 Udon 程序的加载速度。
- 移除了旧的 SDK 更新窗口。
已知问题
- 如果您在 Midi 播放器中更改 midi 轨道,而可视化器是打开的,那么可视化器不会更新到新的轨道,除非它被关闭然后重新打开。
3.1.9
世界 - VRCSDK3-WORLD-2022.10.18.19.47_Public.unitypackage
虚拟形象 - VRCSDK3-AVATAR-2022.10.18.19.47_Public.unitypackage
Udon 节点图:添加了大量的热键!
- 按住以下键之一,然后在图上任意位置点击以创建相应的节点:
1: float2: Vector23: Vector34: Vector4b: Branch+: float addition-: float subtraction=: float equality comparisonShift+B: Block
- 按住
C,然后点击一个常量将其转换为变量- 您也可以通过右键点击常量来做到这一点
Ctrl+G快速分组L+Click记录选定节点的值Shift+A对齐节点- 按住
Shift+F,然后点击一个输出数组类型的节点,自动生成 ForEach 循环 - 上述大多数操作也可以通过右键菜单完成
- 按住以下键之一,然后在图上任意位置点击以创建相应的节点:
添加了一个新的顶部栏,显示当前打开的图,并在您打开更多图时向其打开新的 “标签”
- 您可以使用 X 按钮关闭每个标签
侧边栏中的事件/组条目可点击,便于快速导航
在顶部添加了搜索栏,允许您搜索您的活动图
- 按
Ctrl+F将焦点移动到搜索栏 - 输入至少 3 个字母后激活搜索
- 当有多个搜索结果时,按 Enter 将在它们之间跳转
- 按
顶部栏上有一个新的 “高亮流” 切换,启用后,将高亮通过流边缘连接的节点
- 使用此功能快速查看程序如何到达特定节点
- 如果节点没有任何流连接 - 什么都不会发生
变更
- 在 UdonSyncPlayer 示例中更改视频链接,指向新的位置
3.1.8
- 世界 - VRCSDK3-WORLD-2022.10.12.21.07_Public.unitypackage
- 虚拟形象 - VRCSDK3-AVATAR-2022.10.12.21.07_Public.unitypackage
添加了 3 个可以被任何虚拟形象或世界着色器访问的着色器全局变量:
float _VRChatCameraMode:
- 0 - 正常渲染
- 1 - 在 VR 手持相机中渲染
- 2 - 在桌面手持相机中渲染
- 3 - 为截图渲染
float _VRChatMirrorMode:
- 0 - 正常渲染,不在镜像中
- 1 - 在 VR 中查看的镜像中渲染
- 2 - 在桌面模式下查看的镜像中渲染
float3 _VRChatMirrorCameraPos - 镜像相机的世界空间位置 (独立于眼睛,“居中” 在 VR 中)
世界中的 InputFields 现在在与之交互时会打开键盘模式。如果不希望这种行为,可以添加新创建的
VRCInputFieldKeyboardOverride组件来指定如何覆盖此行为。将其设置为Default将打开触摸模式,而Override则不会。VRCMirrorReflection 上的新选项
cameraClearFlags,可以覆盖镜像中使用的相机清除标志- 默认值是
MirrorClearFlags.FromReferenceCamera,保留当前的行为,即与活动相机一样渲染
- 默认值是
选项
customSkybox和customClearColor允许镜像特定的天空盒和清除颜色现在可以在世界中将重力设置为 0 或负值
修复:用户提供的 FX 层上的遮罩被忽略,并阻止了 Gesture transform 动画的工作。文档已更新。
添加了几个与图形和着色器操作相关的新 Udon 节点:
- VRCGraphics.DrawMeshInstanced
- VRCShader.SetGlobalFloat
- VRCShader.SetGlobalFloatArray
- VRCShader.SetGlobalVector
- VRCShader.SetGlobalVectorArray
- VRCShader.SetGlobalMatrix
- VRCShader.SetGlobalMatrixArray
- VRCShader.SetGlobalInteger
- VRCShader.SetGlobalTexture
- VRCShader.SetGlobalColor
VRCShader 函数在某些情况下接受字符串输入 (主要是纹理名称)。对于这些输入,您必须使用 _Udon 前缀
- 有一个例外。VRCShader 函数也会接受精确的字符串 _AudioTexture,以适应现有的广泛使用的社区创建的 AudioLink 系统
3.1.7
没有匹配的。unitypackage 版本
- 在尝试获取长度之前,检查场景描述符是否有空的生成对象,修复了手动向您的世界添加场景描述符时的问题。
- 在加载示例场景之前提示用户保存他们的场景,修复了这个 Canny 问题。
3.1.6
- 世界 - VRCSDK3-WORLD-2022.08.29.20.48_Public.unitypackage
- 虚拟形象 - VRCSDK3-AVATAR-2022.08.29.20.48_Public.unitypackage
- 世界中的 InputFields 现在在与之交互时会打开键盘模式。如果不希望这种行为,可以添加新创建的
VRCInputFieldKeyboardOverride组件来指定如何覆盖此行为。将其设置为Default将打开触摸模式,而Override则不会。 - VRCMirrorReflection 上的新选项
cameraClearFlags,可以覆盖镜像中使用的相机清除标志- 默认值是
MirrorClearFlags.FromReferenceCamera,保留当前的行为,即与活动相机一样渲染
- 默认值是
- 选项
customSkybox和customClearColor允许镜像特定的天空盒和清除颜色 - 现在可以在世界中将重力设置为 0 或负值
- 修复:用户提供的 FX 层上的遮罩被忽略,并阻止了 Gesture transform 动画的工作。文档已更新。
- 添加了几个与图形和着色器操作相关的新 Udon 节点:
- VRCGraphics.DrawMeshInstanced
- VRCShader.SetGlobalFloat
- VRCShader.SetGlobalFloatArray
- VRCShader.SetGlobalVector
- VRCShader.SetGlobalVectorArray
- VRCShader.SetGlobalMatrix
- VRCShader.SetGlobalMatrixArray
- VRCShader.SetGlobalInteger
- VRCShader.SetGlobalTexture
- VRCShader.SetGlobalColor
- VRCShader 函数在某些情况下接受字符串输入 (主要是纹理名称)。对于这些输入,您必须使用 _Udon 前缀
- 有一个例外。VRCShader 函数也会接受精确的字符串 _AudioTexture,以适应现有的广泛使用的社区创建的 AudioLink 系统
3.1.6-beta.1
- 世界 - VRCSDK3-WORLD-2022.08.12.22.39_Public.unitypackage
- 虚拟形象 - VRCSDK3-AVATAR-2022.08.12.22.39_Public.unitypackage
- 修复:用户提供的 FX 层上的遮罩被忽略,并阻止了 Gesture transform 动画的工作。文档已更新:/creators.vrchat.com/worlds/udon/using-build-test#fx
- 所有输入字段都将弹出键盘,我们添加了一个组件,如果您不希望在字段上使用这个功能,可以禁用它
- 添加了自定义镜像天空盒和清除标志的能力
- 添加了几个与图形和着色器操作相关的新 Udon 节点:
VRCGraphics.DrawMeshInstancedVRCShader.SetGlobalFloatVRCShader.SetGlobalFloatArrayVRCShader.SetGlobalVectorVRCShader.SetGlobalVectorArrayVRCShader.SetGlobalMatrixVRCShader.SetGlobalMatrixArrayVRCShader.SetGlobalIntegerVRCShader.SetGlobalTextureVRCShader.SetGlobalColor
- 现在可以在世界中将重力设置为 0 或负值
3.1.5
没有匹配的。unitypackage 版本
- 在重新导入给定的 SDK 后,将 “canary file” 写入项目的 Library 文件夹 (所以只有在 Library 重建时才会再次自动重新加载)。
- 使用 EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo() 替代我自己编写的检测方法
- 使用 Async Task 替代 EditorCoroutine 来等待编译完成
3.1.4
没有匹配的。unitypackage 版本
- 现在会等到场景加载完毕后再运行 SDK3ImportFix
- 将一个文件写入 Assets 目录时解释如何找到样本,而不是弹出一个窗口并写入项目注册表。
- 在检查受保护的文件路径时,使用跨平台的
Path.DirectorySeparatorChar而不是/。
3.1.3
没有匹配的。unitypackage 版本
- 在重新加载 SDK 后自动重新加载当前场景,这应该可以自动修复损坏的 VRCUrlInputFields 和其他缺失的脚本。
- 在重新加载 SDK 后清除控制台,以帮助用户查看是否有任何错误持续存在。
- 当项目首次打开时,显示关于样本被移动的消息。
3.1.2
- 世界 - VRCSDK3-WORLD-2022.07.26.21.44_Public
- 虚拟形象 - VRCSDK3-AVATAR-2022.07.26.21.45_Public
- 在启动多个本地客户端之间添加暂停,以避免触发 EAC
- 项目加载时总是重新加载 SDK
- 转换后的 DB 组件现在将在应用程序和 SDK 中匹配启用/禁用状态
- 在多个本地测试客户端启动之间添加了短暂的延迟,以解决同时启动时可能出现的一些问题
- 修复了在虚拟形象设置过程中左/右脚交换的问题