AI游戏调试
这是雷蛇QA智能助手的AI检测功能。
AI会生成缺陷的标题、描述、严重程度预估,以及详细的复现步骤。随后,QA测试人员可对所有内容进行编辑和审核,再提交至他们所选择的缺陷追踪工具(例如JIRA)。
QA测试人员可以专注于测试和游戏本身——因为AI负责处理“文书工作”,测试人员在发现问题时无需中断流程,目标是将平均报告时间“从分钟级缩短到秒级”。
请注意,目前AI功能仍处于Beta测试阶段,仅限特定访问。
AI游戏调试Unreal示例项目
我们提供了一个TPS游戏的应用示例,用于展示雷蛇QA智能助手的使用方法。
该示例同时提供Unreal项目和已编译版本。
使用前提:
- 持有有效企业版计划的雷蛇账户
- 可访问雷蛇QA智能助手网页端
- 在主机PC上运行雷蛇AI服务- 点击下载 - 查看安装说明
- 在主机PC上安装并运行雷蛇Chroma幻彩应用
按照以下步骤测试Unreal示例项目:
- 步骤 1. 点此下载游戏设计文档PDF
- 步骤 2. 在雷蛇QA智能助手网页端中设置项目,包括游戏工作室、游戏标题、类型、游戏设计文档等。
- 步骤 3. 下载并复制应用提供的service.conf到以下路径(可替换已有文件)
C:\Program Files (x86)\RazerAIService\RazerAIService\ - 步骤 4. 下载示例项目 并运行示例场景。先完整游玩一遍关卡,让雷蛇QA智能助手模型完成初始化。
- 步骤 5. 再次运行示例场景,验证雷蛇QA智能助手的缺陷追踪、视频捕获以及Jira集成功能。 该示例场景是一个简单的TPS场景,包含若干TPS游戏开发中常见的问题。
下载Unreal示例项目
使用方法
- 确保已安装Microsoft Visual C++。UE 5.5.4推荐编译器版本为v14.38-17.8。未在Clang上测试。
- 确保已安装并运行雷蛇Chroma幻彩应用。
- 登录雷蛇QA智能助手。
- 使用
Content/GDD/Unreal Shooter GDD.pdf创建游戏项目,并确保项目的 Game Title 设置为RazerUnrealQADemo。 - 前往设置页面下载并安装雷蛇AI服务(Razer AI Service)。
- 下载并替换service配置文件。
- 打开
QACompanionDemo.uproject。 - 点击运行。
- 你应该在左上角看到
InitSDK_SUCCESS以及其他提示信息 - 游玩关卡,你应能看到更多SUCCESS提示。雷蛇QA智能助手的网页仪表盘会显示所有已检测到的缺陷。
雷蛇QA智能助手-事件
以下是示例项目中使用的蓝图列表,以及这些蓝图触发的事件说明。
事件通过SetEventName函数发送。
事件使用加粗表示,变量使用{}包裹。
BP_ThirdPersonGameMode
- 在开始时调用
InitSDK - 初始化成功后发送
GameSessionStart
由于示例项目只有一个关卡,因此游戏模式中InitSDK和GameSessionStart在构造函数中触发
同时确保GameSessionStart在其他事件(例如PlayerSpawned;Player;{PlayerId};Room;{RoomId})之前触发
BP_ThirdPersonCharacter
- 玩家生成时发送
PlayerSpawned;Player;{PlayerId};Room;{RoomId}。示例关卡被划分为 4 个房间,因此使用 RoomId(其他游戏中可能不适用) - 玩家生成时也发送
LevelStarted;Level;{LevelId},因为示例中玩家只有一条命,死亡后关卡会重置 - 每秒发送
CurrentLocation;Player;{PlayerId};Location;{Location} - 玩家开火时发送
FiredWeapon;Player;{PlayerId};Weapon;{WeaponId};CurrentAmmo;{Ammo}。示例中玩家只有一个弹匣,显示格式为(弹匣剩余)/(最大弹药) - 玩家受伤时发送
ReceivedDamage;Player;{PlayerId};Damage;{Damage};CurrentHealth;{Health} - 玩家生命耗尽时发送
OutOfHealth;Player;{PlayerId} - 玩家时间耗尽时发送
OutOfTime;Player;{PlayerId}。示例中玩家完成关卡有时间限制。 - 玩家移动状态变化时发送
IsMoving;Player;{PlayerId};MovingState;{MovingState}
BP_AI_002
- 敌人生成时发送
BotSpawned;Player;{PlayerId};Room;{RoomId} - 敌人受伤时发送
ReceivedDamage;Player;{PlayerId};Damage;{Damage};CurrentHealth;{Health}当前存在一个问题:敌人死亡后仍然会继续接收伤害,因此如果玩家攻击已死亡敌人,雷蛇QA智能助手将触发一个缺陷报告 - 敌人死亡时发送
BotDead;Player;{PlayerId};CurrentRoundTimer;{TimeLeft}
BP_RoomCheck
- 玩家进入房间时发送
EnteredLocation;Player;{PlayerId};Room;{Room} - 玩家离开房间时发送
LeftLocation;Player;{PlayerId};Room;{Room}
BP_Healthpickup
- 玩家拾取生命时发送
PickUpHealth;Player;{PlayerId};CurrentHealth;{Health}
BP_AmmoPickup
- 玩家拾取弹药时发送
PickUpAmmo;Player;{PlayerId};CurrentAmmo;{Ammo}
BP_Enggamepickup and WP_Pause
- 玩家通过拾取结束物品或通过暂停菜单退出时发送
GameSessionEnd;Player;{PlayerId}
触发流程为:先发送事件 → 延迟 → 调用UninitSDK→ 退出游戏
如果SetEventName和UninitSDK之间没有延迟,则事件不会被发送
事件表
以下事件是仅针对本示例定义,在类似游戏中不一定适用。
| Event | Purpose | Found in Blueprint |
|---|---|---|
GameSessionStart | 游戏会话开始。应在任何其他事件之前发送。会重置部分缓存状态。 | BP_ThirdPersonGameMode |
PlayerSpawned;Player;{PlayerId};Room;{RoomId} | 表示玩家生成。重置 {PlayerId} 的缓存状态。 | BP_ThirdPersonCharacter |
BotSpawned;Player;{PlayerId};Room;{RoomId} | 表示敌人生成。重置 {PlayerId} 的缓存状态。 | BP_AI_002 |
LevelStarted;Level;{LevelId} | 表示关卡开始。重置 {LevelId} 的缓存状态。 | BP_ThirdPersonCharacter |
CurrentLocation;Player;{PlayerId};Location;{Location} | 更新 {PlayerId} 的位置(格式为UE的 “X= Y= Z=”)。 | BP_ThirdPersonCharacter |
FiredWeapon;Player;{PlayerId};Weapon;{WeaponId};CurrentAmmo;{Ammo} | 更新 {PlayerId} 当前武器 {WeaponId} 的弹药数。 | BP_ThirdPersonCharacter |
ReceivedDamage;Player;{PlayerId};Damage;{Damage};CurrentHealth;{Health} | 更新 {PlayerId} 的生命值为 {Health}。 | BP_ThirdPersonCharacter, BP_AI_002 |
OutOfHealth;Player;{PlayerId} | 表示 {PlayerId} 已死亡。 | BP_ThirdPersonCharacter |
OutOfTime;Player;{PlayerId} | 表示 {PlayerId} 时间耗尽,关卡失败。 | BP_ThirdPersonCharacter |
IsMoving;Player;{PlayerId};MovingState;{MovingState} | 更新 {PlayerId} 是否在移动。 | BP_ThirdPersonCharacter |
BotDead;Player;{PlayerId};CurrentRoundTimer;{TimeLeft} | 表示敌人 {PlayerId} 已死亡,并更新剩余时间 {TimeLeft} | BP_AI_002 |
EnteredLocation;Player;{PlayerId};Room;{Room} | 更新 {PlayerId} 当前所在房间 {Room} | BP_RoomCheck |
LeftLocation;Player;{PlayerId};Room;{Room} | 清除 {PlayerId} 的房间位置信息 | BP_RoomCheck |
PickUpHealth;Player;{PlayerId};CurrentHealth;{Health} | 更新 {PlayerId} 的生命值为 {Health} | BP_Healthpickup |
PickUpAmmo;Player;{PlayerId};CurrentAmmo;{Ammo} | 更新 {PlayerId} 的弹药数为 {Ammo} | BP_AmmoPickup |
GameSessionEnd;Player;{PlayerId} | 游戏会话结束。 | BP_Enggamepickup, WP_Pause |
使用的资源包
- Animation Starter Pack(动画入门包)
- FPS Weapon Bundle(FPS 武器包)
- Modular SciFi Season 1 Starter Bundle(模块化科幻第一季入门包)
https://www.wyvrn.com
https://www.fab.com/listings/98ff449d-79db-4f54-9303-75486c4fb9d9
https://www.fab.com/listings/8aeb9c48-b404-4dcd-9e56-1d0ecedba7f5
https://www.fab.com/listings/86913335-3c75-42bf-8404-54fe9d9d7396