引言
作为地图创作者,为了持续优化地图内容并提升玩家体验,获取玩家反馈是一项重要工作。常见的做法包括建立群聊、社区,或发放调查问卷,以收集玩家在游玩后的意见与建议。
但这类方式通常依赖创作者主动维护反馈渠道,或依赖玩家主动填写问卷、提交反馈。当地图拥有较大的玩家规模时,这往往会带来额外且持续增长的维护成本,也难以稳定获得足够全面的反馈信息。
基于这一问题,我开始探索一种更被动、也更高效的玩家体验评估方式。受到游戏运营中数据分析方法的启发,我认为,对玩家行为数据进行采集与分析,可以作为传统反馈渠道的重要补充。它能够在不干扰玩家正常游玩的前提下,为创作者提供与游玩体验相关的辅助信息。同时,即使面对大量玩家,也依然能够将整体工作量控制在合理范围内。
例如,通过观测玩家在世界中的停留分布,创作者可以直观地了解玩家对不同内容区域的关注程度,判断玩家行为是否符合原本的设计预期,并据此发现潜在问题,为后续的内容迭代与体验优化提供参考。
本组件围绕这一目标设计,提供了一种在 VRChat 世界中匿名发送遥测数据的能力,用于追踪玩家在世界中的活动情况,并进一步生成玩家分布热力图,帮助创作者以更直观、更低侵入性的方式理解玩家行为。

图 1: 玩家热力图,明度越高表示玩家在此停留时间越长,颜色越红表示玩家在此处聚集密度越高
方法
本组件的核心功能基于 UdonSharp 程序实现,其主要思路是按照固定时间间隔采样玩家位置,并将遥测数据传输到指定的服务器端点,从而完成玩家活动数据的收集。
在世界制作阶段,创作者需要先在场景中选定一个矩形的遥测区域。该区域会被均匀划分为 256 × 256 个单元格,每个单元格对应一个独立的遥测数据点。所有数据点会进一步编码为遥测端点上的 65536 个 URL,并预先生成到一个 VRCUrl 数组中,以供运行时直接索引和发送请求。

图 2: 采样范围编辑视图,红色矩形表示采样范围
当玩家进入世界后,系统会先向玩家展示相关说明,并允许玩家自主选择是否同意遥测。当玩家明确允许后,组件会按照预设时间间隔自动采集其在遥测区域内的平面位置坐标,并将该坐标量化到对应的单元格中。随后,程序会根据该单元格索引获取对应的 URL,并通过 VRCStringDownloader.LoadUrl 向该地址发送一次 GET HTTP 请求,以完成一次遥测数据上传。

图 3: 遥测说明视图,玩家可自主选择是否同意遥测
当端点服务器接收到请求后,会通过解析 URL 中的参数获取玩家所在的单元格坐标以及遥测区域标签,并将这些信息记录到日志中。之后,这些日志会由可观测化工具链进一步处理,包括使用 Grafana Alloy 进行收集、使用 Grafana Loki 进行存储和检索,并最终通过 Grafana 进行可视化展示。基于这些数据,系统可以生成玩家分布热力图,帮助创作者更直观地理解玩家在世界中的活动情况,并为后续内容优化提供依据。