From qe-framework
Builds game systems with Unity/Unreal Engine, implementing ECS architecture, physics, multiplayer networking, shaders, and game AI while targeting 60+ FPS.
How this skill is triggered — by the user, by Claude, or both
Slash command
/qe-framework:Qgame-developerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
1. **Analyze requirements** — Identify genre, platforms, performance targets, multiplayer needs
Load detailed guidance based on context:
| Topic | Reference | Load When |
|---|---|---|
| Unity Development | references/unity-patterns.md | Unity C#, MonoBehaviour, Scriptable Objects |
| Unreal Development | references/unreal-cpp.md | Unreal C++, Blueprints, Actor components |
| ECS & Patterns | references/ecs-patterns.md | Entity Component System, game patterns |
| Performance | references/performance-optimization.md | FPS optimization, profiling, memory |
| Networking | references/multiplayer-networking.md | Multiplayer, client-server, lag compensation |
When implementing game features, provide:
/// <summary>
/// Handles player input and movement. Cache all components in Awake.
/// </summary>
public class PlayerController : MonoBehaviour
{
/// <summary>Movement speed in units per second.</summary>
[SerializeField] private float speed = 5f;
private Rigidbody _rb;
private void Awake()
{
_rb = GetComponent<Rigidbody>();
if (_rb == null) Debug.LogError("PlayerController requires Rigidbody");
}
}
public class WeaponController : MonoBehaviour
{
private bool TryGetWeaponAnimator(out Animator animator)
{
return TryGetComponent<Animator>(out animator);
}
private void Start()
{
if (!TryGetWeaponAnimator(out var anim))
{ Debug.LogError("Animator not found"); enabled = false; return; }
anim.SetTrigger("Ready");
}
}
public class BulletPool : MonoBehaviour
{
private Queue<Bullet> _pool = new();
[SerializeField] private Bullet prefab;
[SerializeField] private int initialSize = 20;
public Bullet Get() => _pool.Count > 0 ? _pool.Dequeue() : Instantiate(prefab);
public void Release(Bullet b) => _pool.Enqueue(b);
}
/// <summary>Describes what the class/method does in one sentence.</summary>
/// <remarks>Additional context: use cases, constraints, performance notes.</remarks>
/// <example><code>MyClass.DoSomething(param);</code></example>
public void MethodName(string param) { /* ... */ }
Unity/Roslyn Analyzers:
IDE0005 (remove unused imports)CS4014 (missing await on async)CS0414 (unused private fields)Unreal Coding Standard:
UnrealAutomationTool BuildGraph with linting enabled| Wrong | Correct |
|---|---|
transform.Find("Child") in Update | Cache reference in Awake: _child = transform.Find(...) |
Allocate new Vector3() in FixedUpdate loop | Pre-allocate or use struct value types; avoid heap in hot paths |
One PlayerMonoBehaviour with 30 responsibilities | Split: PlayerMovement, PlayerCombat, PlayerInventory components |
| No object pooling; Instantiate bullets each frame | Pre-allocate BulletPool; Get/Release from queue |
CompareTag("Enemy") via string: tag == "Enemy" | Use CompareTag("Enemy"); avoids string allocation |
npx claudepluginhub inho-team/qe-framework --plugin qe-frameworkCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.