Skip to content
Back to skills

Unity Physics Anim

ASecurity

Unity 3D physics (Rigidbody, Collider, Joints) and animation (Animator state machines, parameters, layers, Animation Rigging, Humanoid retargeting, blend trees). USE WHEN: tuning rigidbody movement, designing Animator state machines, blending animations, layer collision matrix, joints/constraints, motion warping, IK setups. DO NOT USE FOR: 2D physics or 2D animation (use `unity-2d-physics` / `unity-2d-animation`); ECS physics (use `unity-dots`).

  • 31 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 8, 2026
ai-agentsspring

Security analysis

A100/100

Scanned September 8, 2026

npx -y skills add claude-dev-suite/claude-dev-suite --skill unity-physics-anim --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Unity Physics Anim?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Unity Physics Anim
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/claude-dev-suite-unity-physics-anim/badge)](https://www.skillsdirectory.com/skills/claude-dev-suite-unity-physics-anim)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: unity-physics-anim
description: |
  Unity 3D physics (Rigidbody, Collider, Joints) and animation (Animator state
  machines, parameters, layers, Animation Rigging, Humanoid retargeting,
  blend trees).

  USE WHEN: tuning rigidbody movement, designing Animator state machines,
  blending animations, layer collision matrix, joints/constraints, motion
  warping, IK setups.

  DO NOT USE FOR: 2D physics or 2D animation (use `unity-2d-physics` /
  `unity-2d-animation`); ECS physics (use `unity-dots`).
allowed-tools: Read, Grep, Glob, Write, Edit
---

# Unity Physics & Animation (3D)

## Rigidbody fundamentals

```csharp
[RequireComponent(typeof(Rigidbody))]
public class CharacterMover : MonoBehaviour {
    [SerializeField] private float moveSpeed = 6f;
    [SerializeField] private float jumpVelocity = 8f;
    private Rigidbody _rb;
    private Vector2 _input;
    private bool _jumpQueued;

    private void Awake() {
        _rb = GetComponent<Rigidbody>();
        _rb.interpolation = RigidbodyInterpolation.Interpolate;     // smooth visual
        _rb.collisionDetectionMode = CollisionDetectionMode.Continuous;
    }

    public void SetInput(Vector2 i)   => _input = i;
    public void Jump()                => _jumpQueued = true;

    private void FixedUpdate() {
        Vector3 vel = _rb.linearVelocity;
        Vector3 target = new Vector3(_input.x, 0, _input.y) * moveSpeed;
        vel.x = target.x; vel.z = target.z;
        if (_jumpQueued) { vel.y = jumpVelocity; _jumpQueued = false; }
        _rb.linearVelocity = vel;
    }
}
```

Note: in Unity 6 it's `linearVelocity` (not `velocity`).

## Layer collision matrix

Edit > Project Settings > Physics > Layer Collision Matrix. Default — too permissive. Cull pairs you don't need (Player/PlayerProjectile, Enemy/EnemyProjectile) for both correctness and perf.

## Joints

| Joint | Use |
|---|---|
| Hinge | Doors, swinging objects |
| Configurable | Custom freedom — vehicles, ragdolls |
| Spring | Soft-body-like bouncy connections |
| Fixed | Two rigidbodies behaving as one (breakable) |

## Animator state machine

```
[Idle] --(Speed > 0.1)--> [Run]
[Run]  --(Speed < 0.1)--> [Idle]
[Run]  --(Jump trigger)-> [Jump] --(Grounded && Vel<0)--> [Land] --> [Idle]
```

Parameters: `float Speed`, `bool Grounded`, `trigger Jump`. **Cache hashes**:

```csharp
private static readonly int SpeedHash    = Animator.StringToHash("Speed");
private static readonly int JumpHash     = Animator.StringToHash("Jump");

void Update() => _animator.SetFloat(SpeedHash, _input.magnitude);
void OnJump() => _animator.SetTrigger(JumpHash);
```

## Animator layers + masks

Upper-body shooting layer over base locomotion: layer with weight 1, Avatar Mask covering only spine/arms, Override blending mode.

## Animation Rigging

Use for procedural pose adjustments without breaking animation: Two-Bone IK (hand to weapon), Multi-Aim Constraint (head looks at target), Damped Transform (cloth-like trailing).

Rig builds at runtime via `RigBuilder` — animations evaluate first, then rig constraints adjust.

## Humanoid retargeting

Map any FBX with similar skeleton to Mecanim Humanoid → animations swap across characters automatically. Generic rig only when humanoid mapping doesn't fit (quadrupeds, robots).

## Anti-patterns

| Anti-pattern | Fix |
|---|---|
| `transform.position` writes for Rigidbody object | `rb.MovePosition` / set linearVelocity in FixedUpdate |
| `Update` for physics input | FixedUpdate for physics writes; Update for input sampling + jump-queue flags |
| String parameter names every frame | Cache `Animator.StringToHash` ints |
| Many Animator transitions w/ no exit time | Set `Has Exit Time = false` + Transition Duration = 0 for snappy combat |
| Heavy IK on every character every frame | Disable RigBuilder when off-screen / culled |

## Production checklist

- [ ] Layer collision matrix culled
- [ ] Rigidbody interpolation set on player + camera-tracked objects
- [ ] Continuous collision on fast-moving bodies
- [ ] Animator parameters use cached hashes
- [ ] Humanoid avatars share animations across characters
- [ ] Rig constraints disabled when not visible

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…