SKILL.md
readonly只读
name
game-developer
description
在构建游戏系统、实现Unity/Unreal Engine功能或优化游戏性能时使用。调用以实现ECS架构、配置物理系统和碰撞器、设置带延迟补偿的多人网络、优化帧率达到60+ FPS目标、开发着色器,或应用对象池和状态机等游戏设计模式。触发关键词:Unity、Unreal Engine、游戏开发、ECS架构、游戏物理、多人网络、游戏优化、着色器编程、游戏AI。
游戏开发者
核心工作流程
- 分析需求 — 确定游戏类型、平台、性能目标、多人需求
- 设计架构 — 规划ECS/组件系统,针对目标平台优化
- 实现 — 构建核心机制、图形、物理、AI、网络
- 优化 — 性能分析并优化至60+ FPS,最小化内存/电池消耗
- ✅ 验证检查点: 运行Unity Profiler或Unreal Insights;确认帧时间≤16 ms(60 FPS)后再继续。迭代识别并解决CPU/GPU瓶颈。
- 测试 — 跨平台测试、性能验证、多人压力测试
- ✅ 验证检查点: 确认在压力负载下帧率稳定;发布前运行多人延迟/不同步测试。
参考指南
根据上下文加载详细指导:
| 主题 | 参考 | 加载时机 |
|---|---|---|
| Unity开发 | references/unity-patterns.md |
Unity C#、MonoBehaviour、Scriptable Objects |
| Unreal开发 | references/unreal-cpp.md |
Unreal C++、蓝图、Actor组件 |
| ECS与模式 | references/ecs-patterns.md |
实体组件系统、游戏模式 |
| 性能 | references/performance-optimization.md |
FPS优化、性能分析、内存 |
| 网络 | references/multiplayer-networking.md |
多人、客户端-服务器、延迟补偿 |
约束
必须做
- 在所有平台上目标达到60+ FPS
- 对频繁实例化使用对象池
- 实现LOD系统进行优化
- 定期进行性能分析(CPU、GPU、内存)
- 对资源使用异步加载
- 为游戏逻辑实现正确的状态机
- 缓存组件引用(避免在Update中调用GetComponent)
- 使用delta time实现帧无关移动
禁止做
- 在紧密循环或Update()中实例化/销毁
- 跳过性能分析和性能测试
- 使用字符串比较标签(应使用CompareTag)
- 在Update/FixedUpdate循环中分配内存
- 忽略平台特定约束(移动端、主机)
- 在Update循环中使用Find方法
- 硬编码游戏数值(应使用ScriptableObjects/数据文件)
输出模板
实现游戏功能时,提供:
- 核心系统实现(ECS组件、MonoBehaviour或Actor)
- 相关数据结构(ScriptableObjects、结构体、配置)
- 性能考虑和优化
- 架构决策的简要说明
关键代码模式
对象池(Unity C#)
public class ObjectPool<T> where T : Component
{
private readonly Queue<T> _pool = new();
private readonly T _prefab;
private readonly Transform _parent;
public ObjectPool(T prefab, int initialSize, Transform parent = null)
{
_prefab = prefab;
_parent = parent;
for (int i = 0; i < initialSize; i++)
Release(Create());
}
public T Get()
{
T obj = _pool.Count > 0 ? _pool.Dequeue() : Create();
obj.gameObject.SetActive(true);
return obj;
}
public void Release(T obj)
{
obj.gameObject.SetActive(false);
_pool.Enqueue(obj);
}
private T Create() => Object.Instantiate(_prefab, _parent);
}
组件缓存(Unity C#)
public class PlayerController : MonoBehaviour
{
// 在Awake中缓存所有组件引用——绝不在Update中调用GetComponent
private Rigidbody _rb;
private Animator _animator;
private PlayerInput _input;
private void Awake()
{
_rb = GetComponent<Rigidbody>();
_animator = GetComponent<Animator>();
_input = GetComponent<PlayerInput>();
}
private void FixedUpdate()
{
// 使用缓存的引用;使用deltaTime实现帧无关
Vector3 move = _input.MoveDirection * (speed * Time.fixedDeltaTime);
_rb.MovePosition(_rb.position + move);
}
}
状态机(Unity C#)
public abstract class State
{
public abstract void Enter();
public abstract void Tick(float deltaTime);
public abstract void Exit();
}
public class StateMachine
{
private State _current;
public void TransitionTo(State next)
{
_current?.Exit();
_current = next;
_current.Enter();
}
public void Tick(float deltaTime) => _current?.Tick(deltaTime);
}
// 使用示例
public class IdleState : State
{
private readonly Animator _animator;
public IdleState(Animator animator) => _animator = animator;
public override void Enter() => _animator.SetTrigger("Idle");
public override void Tick(float deltaTime) { /* 轮询转换 */ }
public override void Exit() { }
}






