移动/游戏
在开发 Unity/Unreal 游戏系统…
适用于 Unity/Unreal 游戏功能实现、ECS/组件架构、物理、多人网络、性能优化、shader 与游戏 AI 等场景。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
在开发 Unity/Unreal 游戏系特定
解决思路
- 分析需求:识别游戏类型、目标平台、性能目标和多人需求。
- 设计架构:规划 ECS/组件系统,并针对目标平台优化。
- 实现:构建核心机制、图形、物理、AI 和网络。
- 优化:用 profiling 优化到 60+ FPS,并降低内存和电池消耗。
- 优化验证检查点:运行 Unity Profiler 或 Unreal Insights;确认帧时间 ≤16 ms(60 FPS)后再继续;迭代定位并解决 CPU/GPU 瓶颈。
- 测试:做跨平台测试、性能验证和多人压力测试。
- 测试验证检查点:确认压力负载下帧率稳定;发布前运行多人延迟/不同步(desync)测试。
- 按上下文加载详细指南:Unity 开发读 references/unity-patterns.md(Unity C#、MonoBehaviour、Scriptable Objects)。
- 按上下文加载详细指南:Unreal 开发读 references/unreal-cpp.md(Unreal C++、Blueprints、Actor components)。
- 按上下文加载详细指南:ECS 与模式读 references/ecs-patterns.md(Entity Component System、游戏模式)。
- 按上下文加载详细指南:性能读 references/performance-optimization.md(FPS 优化、profiling、内存)。
- 按上下文加载详细指南:网络读 references/multiplayer-networking.md(多人、client-server、lag compensation)。
- 必须做:所有平台目标 60+ FPS。
- 必须做:频繁实例化时使用对象池。
- 必须做:实现 LOD 系统进行优化。
- 必须做:定期分析性能(CPU、GPU、内存)。
- 必须做:资源使用异步加载。
- 必须做:游戏逻辑使用正确的状态机。
- 必须做:缓存组件引用(避免在 Update 中调用 GetComponent)。
- 必须做:使用 delta time 实现帧无关移动。
- 不能做:不要在紧循环或 Update() 中 Instantiate/Destroy。
- 不能做:不要跳过 profiling 和性能测试。
- 不能做:标签不要用字符串比较(使用 CompareTag)。
- 不能做:不要在 Update/FixedUpdate 循环中分配内存。
- 不能做:不要忽略平台特定约束(mobile、console)。
- 不能做:不要在 Update 循环中使用 Find 方法。
- 不能做:不要硬编码游戏数值(使用 ScriptableObjects/数据文件)。
- 实现游戏功能时输出:核心系统实现(ECS component、MonoBehaviour 或 Actor)。
- 实现游戏功能时输出:相关数据结构(ScriptableObjects、structs、configs)。
- 实现游戏功能时输出:性能考虑与优化。
- 实现游戏功能时输出:架构决策的简要说明。
- 对象池模式(Unity C#):实现 ObjectPool<T> where T : Component,内部用 Queue<T> _pool、T _prefab、Transform _parent 维护;构造函数接收 prefab、initialSize、parent,循环 initialSize 次调用 Release(Create());Get() 从 _pool Dequeue 或 Create(),然后 SetActive(true) 并返回;Release(T obj) 先 SetActive(false) 再入队;Create() 用 Object.Instantiate(_prefab, _parent)。
- 组件缓存模式(Unity C#):在 Awake 中缓存 Rigidbody、Animator、PlayerInput 等引用,绝不在 Update 中 GetComponent;在 FixedUpdate 中使用缓存引用,以 speed * Time.fixedDeltaTime 计算移动,并用 _rb.MovePosition(_rb.position + move) 移动。
- 状态机模式(Unity C#):定义抽象 State,包含 Enter()、Tick(float deltaTime)、Exit();StateMachine 维护 _current,TransitionTo(next) 先调用 _current?.Exit(),再设置 _current = next,最后 _current.Enter();Tick(deltaTime) 调用 _current?.Tick(deltaTime);具体状态如 IdleState 通过构造函数注入 Animator,Enter 时调用 _animator.SetTrigger("Idle"),Tick 轮询转换,Exit 为空实现。
适用边界 · 注意事项
- 不适用于非游戏开发、非实时交互应用,或不需要 Unity/Unreal 引擎支持的通用软件开发。
- 不适用于无法运行 Unity Profiler/Unreal Insights 或无法做跨平台/多人压力测试的环境。
- 不适用于只做一次性原型、不要求 60+ FPS 且不需要多人网络的低性能要求项目。