assembly-definitions
Assembly definition management — when to create asmdefs, reference rules, Editor/Runtime/Test separation, platform filters, compilation speed optimization.
DOTween animation library — sequence composition, tween lifecycle, easing, kill strategies. CRITICAL: Always kill tweens in OnDestroy to prevent leaks and errors.
$ npx -y skills add XeldarAlz/everything-claude-unity --skill dotween --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/dotweenContext preview
The summary Claude sees to decide when to auto-load this skill.
DOTween animation library — sequence composition, tween lifecycle, easing, kill strategies. CRITICAL: Always kill tweens in OnDestroy to prevent leaks and errors.
name: dotween description: "DOTween animation library — sequence composition, tween lifecycle, easing, kill strategies. CRITICAL: Always kill tweens in OnDestroy to prevent leaks and errors." globs: ["**/DOTween*", "**/*Tween*.cs", "**/*Animation*.cs"]
DOTween (Demigiant) is the standard tweening library for Unity. It provides fluent, chainable methods for animating transforms, UI elements, materials, and arbitrary values with minimal boilerplate.
Every shortcut method follows the pattern `target.DO[Property](endValue, duration)`.
// Transform tweens
transform.DOMove(new Vector3(0, 5, 0), 1f); // World position
transform.DOLocalMove(new Vector3(0, 5, 0), 1f); // Local position
transform.DOScale(Vector3.one * 1.5f, 0.3f); // Scale
transform.DORotate(new Vector3(0, 180, 0), 0.5f); // Euler rotation
transform.DOLocalRotateQuaternion(targetRot, 0.5f); // Quaternion rotation
// UI tweens (CanvasGroup, Image, etc.)
canvasGroup.DOFade(0f, 0.5f); // Alpha fade
image.DOColor(Color.red, 0.2f); // Color change
image.DOFillAmount(1f, 1f); // Fill bar
rectTransform.DOAnchorPos(Vector2.zero, 0.3f); // UI position
// Material tweens — NEVER use renderer.material (clones material, breaks batching).
// Use MaterialPropertyBlock for per-instance changes, or tween a shared material if all instances share the tween.
private static readonly int ColorId = Shader.PropertyToID("_Color");
private MaterialPropertyBlock _propBlock;
Color from = Color.black;
DOTween.To(() => from, c =>
{
from = c;
_propBlock.SetColor(ColorId, c);
renderer.SetPropertyBlock(_propBlock);
}, Color.white, 0.1f);
// Arbitrary value tween
float value = 0f;
DOTween.To(() => value, x => value = x, 10f, 1f);Sequences let you chain, overlap, and orchestrate multiple tweens as a single unit.
Sequence seq = DOTween.Sequence();
// Append — plays after previous tween finishes
seq.Append(transform.DOMove(targetPos, 0.5f));
seq.Append(transform.DOScale(Vector3.one * 1.2f, 0.3f));
// Join — plays at the same time as the previous tween
seq.Append(transform.DOMove(targetPos, 0.5f));
seq.Join(transform.DORotate(new Vector3(0, 360, 0), 0.5f));
// Insert — plays at a specific time position in the sequence
seq.Insert(0.2f, canvasGroup.DOFade(1f, 0.3f));
// Intervals and callbacks
seq.PrependInterval(0.5f); // Delay before sequence starts
seq.AppendInterval(0.2f); // Pause between tweens
seq.AppendCallback(() => Debug.Log("Done!"));
seq.InsertCallback(1f, () => PlaySound());
// Sequence settings
seq.SetLoops(3, LoopType.Yoyo);
seq.SetUpdate(true); // Unscaled time
seq.OnComplete(() => Destroy(gameObject));Sequence innerSeq = DOTween.Sequence(); innerSeq.Append(transform.DOScale(1.2f, 0.15f)); innerSeq.Append(transform.DOScale(1f, 0.15f)); Sequence outerSeq = DOTween.Sequence(); outerSeq.Append(transform.DOMove(targetPos, 0.5f)); outerSeq.Append(innerSeq);
Easing controls the interpolation curve. Choose based on the feel you want.
transform.DOMove(target, 0.5f).SetEase(Ease.OutBounce); transform.DOScale(1.2f, 0.2f).SetEase(Ease.OutBack); // Pop/overshoot transform.DOMove(target, 1f).SetEase(Ease.InOutQuad); // Smooth start/stop canvasGroup.DOFade(0f, 0.3f).SetEase(Ease.InQuad); // Accelerate out
| Ease | Use Case | |------|----------| | `Ease.OutBack` | Button press pop, element appearing with overshoot | | `Ease.OutBounce` | Landing, dropping items | | `Ease.InOutQuad` | Smooth camera moves, panel slides | | `Ease.OutQuad` | Natural deceleration, most general-purpose | | `Ease.InBack` | Element leaving with anticipation | | `Ease.OutElastic` | Springy, playful UI elements | | `Ease.Linear` | Progress bars, constant-speed movement |
[SerializeField] private AnimationCurve _customEase; transform.DOMove(target, 1f).SetEase(_customEase);
**Always kill tweens when the owning object is destroyed.** Tweens that target destroyed objects cause `MissingReferenceException` and memory leaks.
public class AnimatedElement : MonoBehaviour
{
private Tween _activeTween;
public void PlayAnimation()
{
// Kill any existing tween before starting a new one
_activeTween?.Kill();
_activeTween = transform.DOScale(1.2f, 0.3f)
.SetEase(Ease.OutBack);
}
private void OnDestroy()
{
// CRITICAL: Kill all tweens targeting this transform
transform.DOKill();
// If you used SetId(this), also kill by ID:
// DOTween.Kill(this);
// Or kill a specific stored tween:
// _activeTween?.Kill();
}
}transform.DOKill(); // Kill all tweens on this transform
transform.DOKill(true); // Kill and force completion
DOTween.Kill(this); // Kill tweens with this object as ID
DOTween.Kill("myTween"); // Kill tweens with string ID
DOTween.KillAll(); // Nuclear option — kill everything
tween.Kill(); // Kill a specific tween referenceTag tweens with IDs for targeted operations.
transform.DOMove(target, 1f).SetId(this); // Object ID
transform.DOMove(target, 1f).SetId("uiTransition"); // String ID
// Later: kill, pause, or play by ID
DOTween.Kill("uiTransition");
DOTween.Pause(this);
DOTween.Play(this);By default, tweens auto-destroy on completion. Disable for reusable tweens.
private Tween _bounceTween;
private void Awake()
{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…