103
社区成员
发帖
与我相关
我的任务
分享| 这个作业属于哪个课程 | 2501_CS_SE_FZU |
|---|---|
| 这个作业要求在哪里 | 团队作业——站立式会议+α冲刺 |
| 这个作业的目标 | 确定项目的代码规范、本次α冲刺的任务与计划 |
| 其他参考文献 | 《构建之法》、Google Style Guides |
文件与类一一对应:每个 .cs 文件仅包含一个公有类或接口,文件名与公有类名严格一致,采用 PascalCase,例如 EnemyAI.cs 内定义 public class EnemyAI。
子类 / 私有类型:若文件内包含私有辅助类或嵌套类,类名仍采用 PascalCase,且尽量转为内部类或放入单独文件。
目录映射业务:模块目录应清晰反映功能边界,示例:Enemy Module/EnemyAI.cs。
按模块分层命名:根命名空间为项目名,二级为模块名,三级或更多按职责细分,例如:
namespace RoguelikeDemo.EnemyModule
{
public class EnemyAI : MonoBehaviour {}
}
一致性:同一模块下所有类应使用相同命名空间,避免随意使用全局命名空间。
测试与编辑器代码:编辑器脚本放在 .Editor 命名空间或同一根命名空间下的 Editor 子空间,例如 RoguelikeDemo.Editor。
字段:
公有属性:
常量与静态:
示例:
[Header("基础属性")]
public float moveSpeed = 5f;
[SerializeField] private int _hp = 100;
public int HP => _hp;
private bool _isAlive = true;
访问控制:默认尽量缩小可见性范围,先 private,再 internal,再 public。
生命周期方法顺序:在类中统一顺序声明 MonoBehaviour 的生命周期方法,推荐: Awake → OnEnable → Start → Update → FixedUpdate → LateUpdate → OnDisable → OnDestroy。
方法分层:将公有 API 方法放在生命周期方法之后,私有工具方法放在最后。方法顺序须逻辑清晰,相关方法相邻排列。
命名与职责:
示例结构:
public class Attack : MonoBehaviour
{
void Start() { ... }
void Update() { ... }
public void DoAttack() { ... }
private void OnCollisionEnter2D(Collision2D collision) { ... }
private void PlayAttackAnimation() { ... }
}
早期返回避免嵌套:使用 guard clause 简化层级,例如 if (target == null) return;
XML 注释用于公共 API:接口、抽象类、公开方法与属性使用三斜线 XML 注释,包含简要 summary 与参数说明。
示例:
/// <summary>
/// 攻击接口
/// </summary>
public interface IAttacker
{
/// <summary>发起攻击</summary>
void Attack(GameObject target);
}
属性、Inspector字段用 // 或 [Tooltip] 注释。
注释准则:注释说明“为什么”与约束,避免重复代码本身显而易见的信息。
Inspector 注释:Inspector 字段使用 [Header]、[Tooltip] 注解或行注释 // 来提示用途与约束。
示例:
[Header("攻击参数")]
[Tooltip("基础攻击力")]
public int attackPower = 10;
[Header("冷却参数")]
[SerializeField, Range(0.1f, 5f)]
private float attackCooldown = 0.5f;
单一职责:类职责单一,复杂功能拆分为服务类或管理器,组件职责尽量以数据驱动和事件驱动为主。
空引用检查:所有 Inspector 依赖或运行时查找的对象须校验 null 并给出可诊断日志。
示例:
if (enemy == null)
{
Debug.LogWarning("Enemy引用未设定"); return;
}
事件与委托解绑:所有订阅在 OnDestroy、OnDisable 或相应对等生命周期中移除,避免内存泄漏。
示例:
void Start() { btn.onClick.AddListener(OnBtnClick); }
void OnDestroy() { btn.onClick.RemoveListener(OnBtnClick); }
Prefab 与资源:Inspector 拖拽优先,运行时查找需缓存引用并判空。动态创建对象的生命周期需明确:谁创建谁销毁。
异常与输入校验:对外部输入、参数与加载资源增加边界检查与错误处理,不抛出未捕获异常到主循环。
代码风格:
调试日志管理:
代码审查与测试:
性能与内存:
using UnityEngine;
/// <summary>
/// 怪物AI控制器
/// </summary>
[RequireComponent(typeof(Rigidbody2D))]
public class EnemyAI : MonoBehaviour
{
[Header("行为参数")]
public float moveSpeed = 2f;
private Rigidbody2D _rb;
void Start() { _rb = GetComponent<Rigidbody2D>(); }
void Update() { Patrol(); }
private void Patrol() { /* ... */ }
}
public class SimplePauseMenu : MonoBehaviour
{
public Button pauseButton;
void Start() { pauseButton.onClick.AddListener(OnPauseClick); }
private void OnPauseClick() { /* ... */ }
void OnDestroy() { pauseButton.onClick.RemoveListener(OnPauseClick); }
}
public interface IDamageable { void TakeDamage(float amount); }
public abstract class SM_BaseSkill : MonoBehaviour
{
public abstract bool TryCast();
}
发布前快速检查清单
公有 API 有 XML 注释
所有 Inspector 引用已赋值或有 null 保护
事件与委托均已解绑
无残留 Debug.Log(或已使用条件编译)
命名空间与文件结构一致
关键逻辑有单元测试或手动测试用例
已完成模块:
待完善功能:
目标:确保玩家移动,攻击,跳跃逻辑正确,完成玩家与技能系统的集成,确保核心操控流畅。
| 任务ID | 任务描述 | 优先级 | 预计工时 | 状态 |
|---|---|---|---|---|
| P-001 | 玩家死亡状态处理:禁用控制、播放死亡动画、触发重生机制 | 高 | 6H | 待开始 |
| P-002 | Attack组件与PlayerController集成:J键触发攻击 | 高 | 4H | 已开始 |
| P-003 | 物理材质优化:零摩擦材质应用 | 中 | 1H | 已完成 |
| P-004 | 移动,跳跃手感调优 | 中 | 3H | 已开始 |
验收标准:
目标:优化敌人行为逻辑,完善掉落系统与死亡处理。
| 任务ID | 任务描述 | 优先级 | 预计工时 | 状态 |
|---|---|---|---|---|
| E-001 | 敌人死亡处理:禁用AI、播放死亡动画、清理资源 | 高 | 5h | 待开始 |
| E-002 | EnemyDrop集成:死亡触发掉落、LootTable配置 | 高 | 3h | 已开始 |
| E-003 | 敌人伤害处理:击退抗性、状态恢复机制 | 中 | 5h | 已开始 |
| E-004 | AI行为优化:追击停止距离、攻击前摇与后摇 | 中 | 3h | 待开始 |
验收标准:
目标:完成一个基础的tilemap战斗地图,提供能够支持玩家游玩的基本框架。
| 任务ID | 任务描述 | 优先级 | 预估工时 | 状态 |
|---|---|---|---|---|
| M-001 | Tilemap地图构建:使用cave_tileset构建可玩场景 | 高 | 5h | 已开始 |
| M-002 | 碰撞层优化:Ground/Player/Enemy层配置 | 高 | 3h | 已开始 |
| M-003 | 场景切换实现:StartMenuScene → MainScenes → SaveScenes | 中 | 2h | 待开始 |
| M-004 | 敌人生成点:配置敌人Spawner、敌人分布 | 中 | 3h | 待开始 |
验收标准:
目标:完善玩家动画,实现静止、移动、攻击、跳跃动画,玩家可拾取掉落物品,确保流程的战斗体验。
| 任务ID | 任务描述 | 优先级 | 预估工时 | 状态 |
|---|---|---|---|---|
| P-005 | 玩家可拾取击败敌人后,开启宝箱时的掉落物,确保富含rogue-like元素 | 高 | 6h | 待开始 |
| P-006 | 与Skills组件集成,使玩家能够通过按键输入控制技能正常释放 | 高 | 5h | 待开始 |
| P-007 | 动画系统集成:Animator参数同步(Speed/Jump/Ground/Attack) | 中 | 8h | 已开始 |
| P-008 | 玩家受击处理:击退效果、无敌帧、受击动画 | 低 | 6h | 待开始 |
验收标准:
目标:实现多样化敌人与敌人动画,完善掉落系统。
| 任务ID | 任务描述 | 优先级 | 预估工时 | 状态 |
|---|---|---|---|---|
| E-005 | 敌人掉落优化,接入战利品表,正确实现随机掉落 | 高 | 5h | 待开始 |
| E-006 | 设计多种类型的敌人,丰富战斗体验 | 高 | 5h | 已开始 |
| E-007 | 敌人动画添加,确保敌人巡逻、追击、攻击自然,视觉效果良好 | 中 | 6h | 待开始 |
| E-008 | 敌人多样化攻击方式,为单个敌人设计多种攻击方式,增强对战策略性 | 低 | 5h | 待开始 |
验收标准:
目标:优化攻击判定、元素效果平衡与战斗反馈。
| 任务ID | 任务描述 | 优先级 | 预估工时 | 状态 |
|---|---|---|---|---|
| C-001 | 攻击判定优化:攻击盒大小调整、命中特效 | 高 | 4h | 已开始 |
| C-002 | 元素效果平衡:火焰伤害、冰冻时长、雷链范围调优 | 中 | 6h | 待开始 |
| C-003 | 暴击系统完善:暴击率/暴伤平衡、暴击视觉反馈 | 低 | 4h | 待开始 |
| C-004 | 伤害数字显示:浮动伤害数字、暴击特效 | 中 | 4h | 待开始 |
验收标准:
目标:完善技能释放管线、投射体系统与技能平衡。
| 任务ID | 任务描述 | 优先级 | 预估工时 | 状态 |
|---|---|---|---|---|
| S-001 | 技能投射体系统:Fireball/IceSpike投射与碰撞处理 | 高 | 6h | 已开始 |
| S-002 | 近战技能实现:DashStab/WhirlwindSlash完成 | 高 | 6h | 待开始 |
| S-003 | 技能冷却UI:技能图标、冷却环、MP消耗显示 | 中 | 2h | 已开始 |
| S-004 | 技能事件集成:SkillEventBus完善、UI响应技能事件 | 中 | 2h | 待开始 |
| S-005 | 对象池实现:投射体、特效对象池以减少GC | 低 | 4h | 待开始 |
| S-006 | 技能平衡调整:CD/消耗/伤害数值调优 | 低 | 2h | 待开始 |
验收标准:
目标:完成游戏内UI界面,提供完整的用户体验。
| 任务ID | 任务描述 | 优先级 | 预估工时 | 状态 |
|---|---|---|---|---|
| U-001 | 血条系统集成:Attribute.OnHealthChanged绑定、实时更新 | 高 | 5h | 待开始 |
| U-002 | MP条UI:SM_SkillSystem事件绑定、MP消耗/回复显示 | 高 | 3h | 已开始 |
| U-003 | 技能栏UI:4个技能槽位、按键提示、冷却进度 | 高 | 4h | 已开始 |
| U-004 | 暂停菜单完善:ESC键触发、返回主菜单功能 | 中 | 3h | 已完成 |
| U-005 | 背包UI基础:物品槽位、物品Icon显示 | 中 | 3h | 已开始 |
| U-006 | 死亡UI:死亡提示、重生倒计时、返回主菜单 | 低 | 2h | 待开始 |
验收标准:
目标:构建完整地图,包含可供玩家交互的物体。
| 任务ID | 任务描述 | 优先级 | 预估工时 | 状态 |
|---|---|---|---|---|
| M-005 | Tilemap地图完整构建:使用cave_tileset构建可玩且丰富的场景 | 高 | 6h | 待开始 |
| M-006 | 完成地图可交互物设计,确保宝箱等物品能够被玩家正确触发 | 高 | 5h | 已开始 |
| M-007 | 地图边界与摄像机跟随:相机跟随玩家、边界限制 | 中 | 4h | 已开始 |
| M-008 | 实现地图装饰,优化环境对象、背景层 | 低 | 6h | 待开始 |
验收标准:
目标:实现基础战利品表设计,完成基础的数值设计,实现背包基础功能。
| 任务ID | 任务描述 | 优先级 | 预估工时 | 状态 |
|---|---|---|---|---|
| I-001 | 物品拾取检测:碰撞触发器、拾取范围 | 高 | 4h | 待开始 |
| I-002 | 背包系统:物品数据结构、添加/移除逻辑 | 高 | 4h | 已开始 |
| I-003 | 物品类型定义:消耗品/装备/材料分类 | 中 | 2h | 待开始 |
| I-004 | 物品效果系统:基础物品效果接口 | 中 | 3h | 待开始 |
| I-005 | 装备系统雏形:武器/护甲装备槽位 | 低 | 4h | 待开始 |
| I-006 | 物品UI完善:背包界面、物品详情显示 | 低 | 4h | 待开始 |
验收标准:
目标:全系统联调、数值平衡与体验优化
| 任务ID | 任务描述 | 优先级 | 预估工时 | 状态 |
|---|---|---|---|---|
| T-001 | 全系统集成测试:完整游戏流程测试 | 高 | 3h | 待开始 |
| T-002 | 数值平衡调整:伤害/防御/技能数值调优 | 高 | 4h | 待开始 |
| T-003 | Bug修复:关键bug修复 | 高 | 4h | 待开始 |
| T-004 | 性能优化:GC优化、帧率优化 | 中 | 3h | 待开始 |
| T-005 | 体验优化:手感调优、反馈增强 | 中 | 3h | 待开始 |
| T-006 | 文档完善:README更新、开发文档补充 | 低 | 2h | 待开始 |
验收标准:
为提升 α 冲刺阶段的开发效率、优化成果质量,团队引入 AI 程序员、AI 设计师、AI 测试员三类 AI 技术员,分别嵌入代码开发、资源设计、功能测试全流程,通过 “需求拆解 - 工具适配 - 结果校验 - 迭代优化” 的闭环模式,辅助团队高效完成任务。以下从三类 AI 技术员的具体应用场景展开说明:
AI 程序员以 “规范守护者 + 效率加速器” 的双重角色参与开发,核心围绕代码规范落地、重复逻辑生成、性能优化建议三大方向提供支持,参考阿里巴巴 Java 开发手册、华为内部代码规范的核心思想,确保代码质量与开发效率平衡。
团队在开发工具(如 Visual Studio)中集成 AI 代码规范插件(基于 ChatGPT Code Review 插件二次适配),实现 “实时校验 + 批量修正”:
实时校验:开发者编写代码时,AI 程序员实时扫描代码风格,对不符合规范的内容弹出提示。例如:当字段命名未使用 “_camelCase”(如将 “_hp” 写为 “hp”)、方法顺序未遵循 “生命周期→公有 API→私有工具方法” 逻辑时,插件会自动标注问题位置,并提供规范说明(引用团队《代码规范 1.4 方法规范与结构》)。
批量修正:每日提交代码前,AI 程序员对当前模块代码进行批量规范检查,可一键修正缩进(统一 4 空格)、变量命名、注释格式等基础问题。例如:对未添加 XML 注释的公有方法(如DoAttack()),AI 会根据方法功能自动生成基础注释模板,开发者仅需补充业务细节,减少 80% 的注释编写时间。
针对团队《代码规范 1.9 常用代码模板》中的 MonoBehaviour 模板、UI 事件解绑模板等,AI 程序员支持 “参数化生成”,避免重复编码:
场景化模板生成:开发者输入需求关键词(如 “敌人死亡处理脚本”),AI 会自动生成符合规范的代码框架,包含字段定义(如[SerializeField] private Animator _enemyAnimator)、生命周期方法(Start()中初始化引用、OnDestroy()中清理资源)、核心逻辑(死亡动画播放、掉落触发),并自动添加空引用检查(if (_enemyAnimator == null) Debug.LogWarning("敌人动画组件未赋值")),符合《代码规范 1.7 单一职责与健壮性》要求。
工具类代码生成:针对 “对象池管理”“伤害计算” 等通用逻辑,AI 程序员可根据需求生成基础工具类。例如:开发 “技能投射体对象池” 时,AI 生成包含 “对象创建 - 借出 - 回收” 的完整逻辑,自动引入List存储对象、Action定义回收回调,且代码中已包含 GC 优化处理(避免频繁Instantiate与Destroy),符合《代码规范 1.8 性能与内存》要求,开发者仅需适配具体投射体类型。
在 “攻击判定优化”“GC 优化” 等任务中,AI 程序员提供针对性建议:
性能瓶颈定位:开发者提交代码后,AI 通过静态分析识别性能风险点。例如:在Update()中使用FindObjectOfType()(频繁查找对象)、使用string +=进行字符串拼接(产生垃圾回收)时,AI 会标记风险等级,并提供替代方案(如在Start()中缓存引用、使用StringBuilder)。
复杂逻辑重构:针对嵌套层级较深的代码(如敌人 AI 的 “巡逻 - 追击 - 攻击” 状态判断),AI 程序员可自动重构为 “状态模式”,拆分PatrolState“ChaseState”“AttackState” 三个状态类,每个类仅负责单一状态逻辑,符合《代码规范 1.7 单一职责》要求,同时自动添加状态切换时的参数校验,提升代码可维护性。
AI 设计师聚焦 “UI 界面设计”“动画资源生成”“地图元素适配” 三大任务,确保视觉风格统一、资源符合游戏玩法需求,辅助团队快速完成设计类任务。
针对 “技能栏 UI”“背包 UI” 等任务,AI 设计师遵循团队 UI 设计规范(如色调、字体、按钮样式),提供 “初稿生成 - 迭代优化” 支持:
界面布局生成:开发者输入 UI 需求(如 “技能栏 UI:4 个技能槽位、冷却进度显示、按键提示”),AI 设计师基于 Figma 生成符合规范的界面初稿,自动匹配游戏主色调(如暗黑风的深灰底色 + 红色强调色)、统一字体(如 “Microsoft YaHei” 14 号字),且技能槽位间距、按钮大小符合 “可点击区域≥44×44px” 的交互规范,减少设计师 70% 的基础布局时间。
状态切换效果设计:针对 “技能冷却环动画”“血条实时更新效果”,AI 设计师生成动态效果原型(如冷却环的渐隐动画、血条的平滑过渡效果),并导出为 Unity 可直接使用的 AnimationClip,同时提供动画参数配置建议(如冷却环动画时长与技能 CD 绑定),确保 UI 效果与游戏逻辑同步。
在 “玩家攻击动画”“敌人死亡动画” 等任务中,AI 设计师解决 “动画风格统一”“与代码逻辑适配” 问题:
动画帧生成:开发者提供角色模型(如 2D 像素风格玩家模型)与动画需求(如 “玩家近战攻击:3 帧,包含挥剑 - 命中 - 收剑”),AI 设计师生成符合像素风格的动画帧序列,自动调整帧间隔(如每帧 0.1 秒,确保动画流畅),且动画帧的尺寸、锚点与 Unity 动画系统适配,导入后无需额外调整。
动画状态机配置建议:AI 设计师根据《代码规范 1.7 事件与委托解绑》逻辑,提供 Animator 状态机配置方案。例如:玩家动画状态机中,自动添加 “Idle→Move→Attack” 的状态过渡条件(如Speed>0触发 Move 状态、IsAttacking=true触发 Attack 状态),并建议在OnDestroy()中解绑动画事件监听,避免内存泄漏。
针对 “Tilemap 地图构建”“宝箱等可交互物设计” 任务,AI 设计师辅助完成资源生成与场景适配:
Tile 资源生成:基于团队使用的 “cave_tileset” 风格,AI 设计师生成补充 Tile 资源(如洞穴墙壁变种、地面纹理),确保新资源与原有资源的色调、像素密度一致,避免地图视觉割裂。同时,AI 会标注每个 Tile 的碰撞属性(如 “墙壁 Tile 设置为不可通过”“地面 Tile 设置为可通过”),辅助开发者快速配置碰撞层(符合《代码规范 2.1 地图碰撞层优化》要求)。
可交互物模型设计:针对 “宝箱”“敌人 Spawner” 等可交互物,AI 设计师生成低多边形模型(适配 2D 游戏风格),并提供材质参数建议(如宝箱的金属质感、Spawner 的粒子效果),同时导出为 Unity 预制体(Prefab),预制体中已包含基础碰撞体与触发脚本挂载点,开发者仅需绑定 “打开宝箱触发掉落”“Spawner 生成敌人” 的逻辑即可。
AI 测试员以 “自动化测试执行”“问题复现与定位”“测试用例生成” 为核心,覆盖单元测试、集成测试、性能测试场景,辅助团队提前发现 bug,确保冲刺任务质量。
针对 “玩家死亡处理”“敌人掉落系统” 等核心功能,AI 测试员自动生成单元测试用例,并集成到 Unity Test Framework 中:
单元测试用例生成:基于代码逻辑,AI 测试员生成测试用例。例如:针对玩家TakeDamage()方法,AI 生成 “生命值充足时受击”“生命值为 0 时触发死亡”“无敌帧期间不受伤害” 三个测试场景,每个场景包含输入参数(如伤害值、当前生命值)、预期结果(如生命值变化、死亡事件触发),且测试代码符合团队代码规范(如使用[Test]注解、添加 XML 注释)。
集成测试执行:每日夜间,AI 测试员自动运行全量集成测试用例,覆盖 “玩家攻击→敌人受击→敌人死亡→掉落物品→玩家拾取” 的完整流程。测试完成后,AI 生成测试报告,标注失败用例(如 “敌人死亡未触发掉落”),并定位可能的问题代码行(如EnemyDrop脚本中OnDeath()方法未调用LootTable.GenerateLoot()),辅助开发者快速修复。
当开发者反馈 “攻击判定不准确”“技能释放卡顿” 等问题时,AI 测试员辅助完成问题复现与定位:
问题复现脚本生成:开发者描述问题现象(如 “攻击敌人时,有时命中但不造成伤害”),AI 测试员生成自动化复现脚本,模拟不同场景(如攻击距离、敌人位置、攻击角度),通过循环执行找到问题触发条件(如 “攻击角度 > 30° 时,攻击盒未命中敌人”),并生成复现步骤视频,供团队分析。
日志分析与问题定位:AI 测试员实时监控游戏运行日志,当出现NullReferenceException(空引用异常)、FrameDrop(帧率下降)等问题时,自动抓取异常堆栈信息与性能数据(如 CPU 占用率、内存使用量)。例如:当技能释放时出现帧率骤降,AI 分析日志发现 “投射体未使用对象池,频繁Instantiate导致 GC 峰值”,并指向SkillProjectile脚本中的CreateProjectile()方法,建议使用对象池优化(符合《代码规范 1.8 性能与内存》要求)。
在 “性能优化”“全系统集成测试” 任务中,AI 测试员开展性能测试与多设备兼容性测试:
性能测试:AI 测试员在 Unity 中模拟不同设备配置(如低性能手机、PC 端),运行游戏并采集关键性能指标(如帧率、内存占用、GC 次数)。例如:在低性能设备上,AI 发现 “地图元素过多导致 Draw Call 过高”,并建议使用 “静态批处理”“合并 Mesh” 等优化方案,确保游戏在目标设备上稳定 60FPS(符合《代码规范 2.3 调试与平衡性测试》验收标准)。
兼容性测试:AI 测试员通过云测试平台(如 Firebase Test Lab),在 10 + 款主流设备(如 iPhone 13、小米 12)上自动运行游戏,检测分辨率适配、触摸输入响应、资源加载等问题。例如:AI 发现 “某款安卓设备上,技能栏 UI 按钮位置偏移”,并定位原因是 “未使用 Unity 的 UI 适配锚点”,提供锚点调整建议(如将按钮锚点设置为 “屏幕左下角 + 偏移”)。
为确保三类 AI 技术员高效协同,团队建立 “需求同步 - 结果交叉校验 - 迭代优化” 机制:
需求同步:每日站立会议后,团队将当日任务拆解为 “开发需求”“设计需求”“测试需求”,分别同步给 AI 程序员、AI 设计师、AI 测试员,确保 AI 理解任务目标(如 “开发需求:实现玩家拾取物品功能,需符合背包系统数据结构”)。
结果交叉校验:AI 程序员生成的代码,由 AI 测试员自动执行单元测试;AI 设计师生成的 UI 界面,由 AI 程序员检查是否适配代码逻辑(如 UI 按钮是否绑定正确的事件监听);测试中发现的问题,反馈给 AI 程序员 / 设计师优化,形成闭环。
效果量化:通过 α 冲刺前后对比,AI 技术员助力团队提升开发效率约 40%(如代码编写时间减少 35%、UI 设计时间减少 45%),降低 bug 率约 25%(自动化测试提前发现 60% 的核心 bug),同时确保代码规范落地率从 70% 提升至 95%,满足团队质量要求。