收益:
- 能够通过提供引擎、版本、语言和架构上下文,从人工智能生成可靠、可编译的游戏代码,并通过阅读和理解代码来集成它
- 能够通过编译、测试和分析来管理游戏代码特定的性能(每帧分配)、引擎生命周期和幻觉风险
- 能够在多人游戏中应用主机权限原则,并负责任地仅使用安全信息来保卫和验证自己的游戏。
游戏是软件;不管设计得多么好,都是用代码来实现的。游戏引擎是使游戏运行的基础设施:Unity(广泛使用的用 C# 编写的引擎)和 Unreal Engine(使用 C++ 和可视化脚本语言 Blueprint 的引擎)是最常见的两个。人工智能是代码生成中最成熟的辅助工具之一:玩家控制器、库存系统、状态机、保存/加载、界面逻辑、调试和重构(重构代码而不破坏其行为)。但游戏代码也有其自身的缺陷:性能(帧速率)、引擎生命周期、多人游戏安全性。在本单元中,您将学习如何在游戏代码中安全有效地使用人工智能。
关键原则:引擎和版本上下文
如果人工智能不知道它正在为哪个引擎和版本编写,它将产生混乱、过时或不存在的 API。因此,请在每个代码提示中提供引擎、版本、语言和架构上下文。 “为Unity编写玩家动作”很弱; “Unity 2022.3、C#、新输入系统、基于刚体的物理运动”功能强大。指定您想要虚幻中的蓝图还是 C++ 以及您使用的版本。
分步保护代码流程:
- 提供上下文(引擎、版本、语言、当前架构、约束)。
- 希望它小而明确(单个组件,而不是整个系统)。
- 阅读并理解代码(逐行理解它的作用;不要放入你不理解的代码)。
- 构建和测试(在引擎上运行;配置文件 - 测量性能)。
- 重构和集成(匹配项目标准)。
提示:向 AI 询问代码时,请说“用注释解释”。你的目标是理解代码;将你不理解的人工智能代码放入项目中会积累难以维持的债务。还要求提供小的、可测试的代码块:而不是 500 行系统,执行单个定义作业的 30-50 行组件既易于验证又易于集成。
特定于游戏代码的陷阱
性能。游戏代码每秒运行 30-60 次以上。 AI 可以将昂贵的操作(内存分配、查找、字符串操作)放入每帧运行的 Update 循环中;这会降低帧速率。配置性能关键代码并给出人工智能约束,例如“在每一帧上运行,不分配”。
发动机生命周期。当调用特殊方法时,AI有时会感到困惑,例如Unity中的Awake/Start/Update,Unreal中的BeginPlay/Tick。通过测试捕获生命周期错误。
多人游戏安全。这是 IT/安全方面最关键的问题。永远不要相信多人游戏中的客户端:玩家计算机上的客户端可能会被操纵进行作弊。验证服务器上的关键状态,例如积分、损坏、金钱(服务器权威)。违背这一原则控制AI生成的网络代码;如果人工智能创建了客户端信任漏洞,请修复它。仅使用此信息来捍卫和验证您自己的游戏;未经授权访问或欺骗他人的服务器是非法且不道德的。
注意:人工智能生成的代码可能包含漏洞(缺少输入验证、客户端信任、保存文件操作)。不要盲目接受代码;执行安全审查,特别是网络、经济性并保存代码。
建筑和维护债务
AI快速生成个性化功能;但游戏的架构——系统如何划分、系统如何相互通信、数据保存在哪里——是一个长期的决定,它属于人类。如果你告诉人工智能“一起编写整个库存、战斗和保存系统”,你会得到一个可以工作但紧密耦合、难以维护、不可扩展的纱线球。相反,您可以设计架构,使用 AI 用定义的接口填充小型组件。随着游戏的发展,良好的架构会产生影响:一年后,错误的决策会作为技术债务而出现,从而延迟了每个新功能的推出。
维护债务的另一个来源是在不被理解的情况下进入项目的代码。由人工智能编写的系统今天就可以运行;但是,当六个月后你必须更换它并且没有人记得他们做了什么时,债务就会变成利息。这就是为什么两个原则至关重要:在生产时阅读和理解代码,并要求人工智能提供澄清的评论。根据经验,不要将任何您无法自行重写或至少无法逐行解释的 AI 代码放入您的项目中。 AI赋予速度;你的纪律带来了可持续性。
三个迷你箱子
案例 1 — 发布上下文阻止了该错误。一个程序员首先说,“为Unity写库存”;该代码使用旧的 API,无法编译。然后它给出了上下文“Unity 2022.3,C#,基于ScriptableObject”;代码第一次编译并适合项目。上下文节省了一个小时的调试时间。
案例 2 — 性能陷阱。在一场比赛中,帧率很低。在分析时,可以看到 AI 生成的 Update 方法在每一帧中分配一个新列表并搜索敌人。修复了具有缓存参考和非二次更新的代码,将帧速率从 42 增加到 60。
案例 3 — 发现安全漏洞。在多人游戏中,AI生成的代码计算客户端的伤害并将其报告给服务器;这是开放的作弊行为(客户可能会造成无限的伤害)。该代码已成为服务器独裁(服务器计算损害)。此次审计避免了出版后作弊丑闻。
四个可复制模板
1)带有上下文的代码请求:
引擎:Unity 2022.3。语言:C#。建筑:[例如基于组件]。约束:在Update中分配;可读且有注释。任务:[单个、已定义的组件,例如“双跳角色控制器”]。验证您使用的每个 API 都在此版本中;如果您不确定,请告诉我。
2)代码解释/回顾:
逐行解释下面的代码并写出(1)它的作用,(2)可能的性能问题(每帧分配,昂贵的搜索),(3)可能的错误,(4)改进建议。代码:[粘贴]
3)多人安全审核:
检查以下多人游戏代码的安全性。具体来说:客户端受信任的地方、需要在服务器上验证的关键状态(损坏、点数、金钱)、缺少输入验证。建议修复以使服务器独裁。这只是为了捍卫我自己的游戏。代码:[粘贴]
4)以性能概要为重点的重构:
该代码在每一帧上运行并降低帧速率:[代码]。查找分配、昂贵的查找和不必要的逐帧操作;通过缓存和不太频繁的更新进行优化而不破坏行为。解释一下这些变化。
弱提示/强提示
弱提示:
在Unity中编写一个保存系统。
无版本、格式、数据范围、安全性;结果是一般性且有风险的。
强力提示:
引擎:Unity 2022.3,C#。任务:基于 JSON 的保存/加载系统。待保存:玩家位置、库存、进度。约束:针对文件损坏进行错误管理;向保存文件添加完整性检查(哈希),以防止玩家通过轻松更改它来进行作弊。注释掉代码并验证每个 API 是否处于此版本。
版本控制、范围、错误处理和完整性检查强化了输出。
引擎/语言上下文表
发动机
语言
你必须给人工智能什么
特别注意
团结
C#
版本,输入/物理系统
更新分配、生命周期
不真实的
蓝图
版本、节点上下文
视觉逻辑限制
不真实的
C++
版本、模块结构
内存、GC、宏
多人游戏
两者
网络模型
主持人独裁主义
常见错误
- 未指定引擎/版本。它来自过时的或虚构的 API。
- 不理解代码就信任它。无法维持的债务不断积累。
- 不衡量绩效。逐帧分配会默默地降低帧速率。
- 信任客户。多人游戏中存在作弊漏洞。
- 想要立即拥有整个系统。小的、可测试的部件更安全。
综上所述
AI 是游戏代码中的强大帮手,但它需要引擎、版本和架构上下文。在没有阅读和理解代码、编译和测试代码以及检查性能和安全性的情况下,不要将其放入项目中。在多人游戏中保持服务器独裁,并仅将安全信息用于防御和验证目的。
应用任务
选择一个小组件(例如二段跳或简单的库存)。通过使用“带有上下文的代码请求”模板提供引擎和版本来生成代码。然后通过使用“代码描述/审查”模板审查相同的代码来消除性能和错误风险。在引擎中编译并测试代码。
清单
- [ ] 我给出了引擎、版本、语言和架构上下文。
- [ ] 我阅读并理解了代码;我想要带评论的。
- [ ] 我在引擎中编译并测试了它并测量了性能。
- [ ] 我在网络/经济/保存代码中进行了安全检查。
- [ ] 我仅使用安全信息来捍卫我自己的游戏。