Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Avoid common Unity mistakes — lifecycle ordering, GetComponent caching, physics timing, and Unity's fake null.
Avoid common Unity mistakes — lifecycle ordering, GetComponent caching, physics timing, and Unity's fake null.
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
Awake before Start — use Awake for self-init, Start for cross-references OnEnable called before Start — but after Awake Order between scripts not guaranteed — use Script Execution Order if needed Awake called even if disabled — Start only when enabled
GetComponent every frame is slow — cache in Awake or Start GetComponentInChildren searches recursively — expensive on deep hierarchies TryGetComponent returns bool — avoids null check, slightly faster Use RequireComponent attribute — ensures dependency, documents requirement
Physics in FixedUpdate, not Update — consistent regardless of framerate FixedUpdate can run 0 or multiple times per frame — don't assume 1:1 Rigidbody.MovePosition in FixedUpdate — transform.position bypasses physics Time.deltaTime in Update, Time.fixedDeltaTime in FixedUpdate — or just use deltaTime
Destroyed objects aren't truly null — == null returns true, but object exists Null-conditional ?. doesn't work properly — use == null or bool conversion Destroy doesn't happen immediately — object gone next frame Use DestroyImmediate only in editor — causes issues in builds
StartCoroutine needs MonoBehaviour active — disabled/destroyed stops coroutines yield return null waits one frame — yield return new WaitForSeconds(1) for time StopCoroutine needs same method or Coroutine reference — string overload unreliable Can't return values — use callbacks or set field in coroutine
Instantiate is expensive — pool frequently created/destroyed objects Instantiate(prefab, parent) sets parent — avoids extra SetParent call SetActive(false) before returning to pool — not Destroy Pool inactive objects under a parent — keeps hierarchy clean
[SerializeField] for private fields in inspector — prefer over public public fields auto-serialize — but exposes API you may not want [HideInInspector] hides but still serializes — [NonSerialized] to skip entirely Serialized fields keep inspector values — code defaults ignored after first serialize
Data containers that live as assets — share between scenes/prefabs CreateAssetMenu attribute for easy creation — right-click → Create Don't modify at runtime in builds — changes not saved (except in editor) Great for config, item databases — reduces prefab duplication
Find methods every frame — cache references String comparisons for tags — use CompareTag("Enemy"), not tag == "Enemy" Physics queries allocate — use NonAlloc variants: RaycastNonAlloc UI anchors wrong — stretches unexpectedly on different resolutions async/await without context — use UniTask or careful error handling
Code helpers, APIs, CLIs, browser automation, testing, and developer operations.
Largest current source with strong distribution and engagement signals.