assembly-definitions
Assembly definition management — when to create asmdefs, reference rules, Editor/Runtime/Test separation, platform filters, compilation speed optimization.
Unity physics — non-allocating queries, collision layers, FixedUpdate discipline, continuous collision detection, character controllers, joints.
$ npx -y skills add XeldarAlz/everything-claude-unity --skill physics --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/physicsContext preview
The summary Claude sees to decide when to auto-load this skill.
Unity physics — non-allocating queries, collision layers, FixedUpdate discipline, continuous collision detection, character controllers, joints.
name: physics description: "Unity physics — non-allocating queries, collision layers, FixedUpdate discipline, continuous collision detection, character controllers, joints." globs: ["**/*Physics*.cs", "**/*Collider*.cs", "**/*Rigidbody*.cs", "**/*Trigger*.cs"]
All physics code goes in `FixedUpdate`. Input reading happens in `InputView.Update` (see architecture rules) and is forwarded to the System, which applies forces in `FixedUpdate` from the cached value.
// InputView.cs — reads input in Update, forwards to System
private void Update()
{
Vector2 moveInput = _controls.Player.Move.ReadValue<Vector2>();
_playerSystem.SetMoveInput(moveInput);
}
// PlayerView.cs — applies physics in FixedUpdate from System-owned cached input
private Vector2 _moveInput;
public void SetMoveInput(Vector2 input) => _moveInput = input;
private void FixedUpdate()
{
_rigidbody.AddForce(_moveInput * _force);
}// Pre-allocate buffers
private static readonly RaycastHit[] _hitBuffer = new RaycastHit[16];
private static readonly Collider[] _overlapBuffer = new Collider[32];
// Raycast
int hitCount = Physics.RaycastNonAlloc(origin, direction, _hitBuffer, maxDistance, layerMask);
for (int i = 0; i < hitCount; i++)
{
RaycastHit hit = _hitBuffer[i];
// Process hit
}
// Overlap sphere (area detection)
int overlapCount = Physics.OverlapSphereNonAlloc(center, radius, _overlapBuffer, layerMask);
// Sphere cast (fat raycast)
int castCount = Physics.SphereCastNonAlloc(origin, radius, direction, _hitBuffer, maxDistance, layerMask);// Ignore collisions between layers programmatically Physics.IgnoreLayerCollision(playerLayer, pickupLayer, true); // Or configure in Edit > Project Settings > Physics > Layer Collision Matrix
Layer organization:
6: Player 7: Ground 8: Enemy 9: Projectile 10: Trigger (no physics collision, triggers only) 11: Interactable
| Mode | Use When | |------|----------| | Discrete | Slow objects (default) | | Continuous | Fast objects that might tunnel through thin colliders | | Continuous Dynamic | Fast objects colliding with other fast objects | | Continuous Speculative | Good balance of accuracy and performance |
// Collision (both have colliders, at least one has Rigidbody, neither is trigger)
private void OnCollisionEnter(Collision collision) { }
private void OnCollisionStay(Collision collision) { }
private void OnCollisionExit(Collision collision) { }
// Trigger (at least one collider has isTrigger = true)
private void OnTriggerEnter(Collider other) { }
private void OnTriggerStay(Collider other) { }
private void OnTriggerExit(Collider other) { }After moving a transform directly, physics queries won't reflect the new position until the next physics step. Force sync:
transform.position = newPosition; Physics.SyncTransforms(); // Now raycasts see the new position
| 3D | 2D | |----|-----| | `Rigidbody` | `Rigidbody2D` | | `BoxCollider` | `BoxCollider2D` | | `Physics.Raycast` | `Physics2D.Raycast` | | `Physics.OverlapSphereNonAlloc` | `Physics2D.OverlapCircleNonAlloc` | | `OnCollisionEnter(Collision)` | `OnCollisionEnter2D(Collision2D)` | | `OnTriggerEnter(Collider)` | `OnTriggerEnter2D(Collider2D)` |
| Joint | Use | |-------|-----| | Fixed | Weld objects together | | Hinge | Doors, wheels | | Spring | Bouncy connections | | Configurable | Full control over all axes | | Character | Character controller with physics |
The ultimate Claude Code toolkit for Unity game development. A production-ready, plug-and-play system that gives Claude Code deep Unity expertise — from writing performant C# to building scenes, profiling performance, and triggering iOS/Android builds — all
Assembly definition management — when to create asmdefs, reference rules, Editor/Runtime/Test separation, platform filters, compilation speed optimization.
Structured commit trailers — adds Constraint, Rejected, Scope-risk, and Not-tested metadata to commit messages. Captures architectural decisions and known gaps…
Ambiguity gating — detects vague feature requests and forces structured requirements gathering with scoring across scope, platform, performance, integration,…
Event system patterns — C# events, UnityEvent, SO event channels, static EventBus. When to use each, zero-allocation patterns, memory leak prevention.
Configures Claude Code's statusline to display Unity workflow state — current phase, active agent, files modified, and session duration.
Post-debugging knowledge extraction — captures non-obvious, codebase-specific learnings that pass quality gates. Invoke after resolving tricky bugs or…