Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
josiahsiegel avatar

Unity Csharp Scripting

  • 75 installs
  • 50 repo stars
  • Updated June 18, 2026
  • josiahsiegel/claude-plugin-marketplace

Helps with ai & agent building tasks.

About

unity-csharp-scripting is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted development.

  • unity-csharp-scripting
  • AI & Agent Building
  • AI-coding skill

Unity Csharp Scripting by the numbers

  • 75 all-time installs (skills.sh)
  • +4 installs in the week ending Aug 2, 2026 (Skillselion tracking)
  • Ranked #5,472 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
  • Data as of Aug 3, 2026 (Skillselion catalog sync)
npx skills add https://github.com/josiahsiegel/claude-plugin-marketplace --skill unity-csharp-scripting

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs75
repo stars50
Last updatedJune 18, 2026
Repositoryjosiahsiegel/claude-plugin-marketplace

What it does

Helps with ai & agent building tasks.

Files

SKILL.mdMarkdownGitHub ↗

Unity C# Scripting Patterns

Overview

Core C# scripting reference for Unity development. Covers MonoBehaviour lifecycle, physics and collision APIs, animation scripting, audio, navigation, common design patterns, serialization, and ECS/DOTS coding patterns.

MonoBehaviour Lifecycle

Execution Order

Awake() -> OnEnable() -> Start() -> FixedUpdate() -> Update() -> LateUpdate() -> OnDisable() -> OnDestroy()
MethodWhen CalledUse For
Awake()Once, when object instantiates (before Start)Self-initialization, caching references
OnEnable()Each time object becomes activeSubscribe to events, reset state
Start()Once, before first Update (after all Awake)Cross-object initialization
FixedUpdate()Fixed timestep (default 0.02s)Physics, Rigidbody movement
Update()Every frameInput, non-physics logic
LateUpdate()After all Update callsCamera follow, post-movement adjustments
OnDisable()When object deactivatesUnsubscribe events, save state
OnDestroy()When object is destroyedFinal cleanup, resource release

Key Rules

  • Awake runs even on disabled components (but not disabled GameObjects)
  • Never rely on Awake/Start order between scripts -- use [DefaultExecutionOrder(N)] or Script Execution Order settings
  • Use OnValidate() for editor-time validation of serialized fields

Coroutines and Async

Coroutines

IEnumerator SpawnWaves(int count, float delay)
{
    for (int i = 0; i < count; i++)
    {
        SpawnEnemy();
        yield return new WaitForSeconds(delay);
    }
}
// Start: Coroutine handle = StartCoroutine(SpawnWaves(5, 1f));
// Stop: StopCoroutine(handle); or StopAllCoroutines();
Yield InstructionBehavior
yield return nullWait one frame
yield return new WaitForSeconds(t)Wait t seconds (affected by timeScale)
yield return new WaitForSecondsRealtime(t)Unscaled time
yield return new WaitForFixedUpdate()Wait for next FixedUpdate
yield return new WaitForEndOfFrame()After rendering
yield return new WaitUntil(() => condition)Wait until predicate is true
yield return StartCoroutine(other)Wait for nested coroutine

Async/Await (Unity 6+ / UniTask)

For Unity 2023+/Unity 6, Awaitable is built-in. For older versions, use UniTask.

async Awaitable LoadLevelAsync(string sceneName)
{
    await Awaitable.WaitForSecondsAsync(1f);
    var op = SceneManager.LoadSceneAsync(sceneName);
    while (!op.isDone)
    {
        progressBar.value = op.progress;
        await Awaitable.NextFrameAsync();
    }
}

Events and Delegates

Event Pattern (Recommended)

// Publisher
public class Health : MonoBehaviour
{
    public event System.Action<float> OnDamaged;  // event keyword prevents external invocation
    public event System.Action OnDeath;

    public void TakeDamage(float amount)
    {
        currentHealth -= amount;
        OnDamaged?.Invoke(amount);
        if (currentHealth <= 0) OnDeath?.Invoke();
    }
}

// Subscriber
void OnEnable() => health.OnDamaged += HandleDamage;
void OnDisable() => health.OnDamaged -= HandleDamage;
void HandleDamage(float amount) => /* react */;

ScriptableObject Event Channels

Decouple systems without direct references. Create GameEvent as a ScriptableObject asset, invoke from publishers, and listen from subscribers via GameEventListener MonoBehaviours. See references/design-patterns.md for full implementation.

Physics API Quick Reference

Rigidbody Movement (3D)

TaskMethodWhere
Continuous forcerb.AddForce(dir * force)FixedUpdate
Instant impulserb.AddForce(dir * force, ForceMode.Impulse)FixedUpdate
Direct velocityrb.linearVelocity = dir * speedFixedUpdate
Kinematic moverb.MovePosition(target)FixedUpdate
Rotationrb.MoveRotation(targetRot)FixedUpdate

Note: In Unity 6, Rigidbody.velocity is renamed to Rigidbody.linearVelocity.

Raycasting

if (Physics.Raycast(origin, direction, out RaycastHit hit, maxDistance, layerMask))
{
    Debug.Log($"Hit {hit.collider.name} at {hit.point}");
}
// Use Physics.RaycastAll or Physics.RaycastNonAlloc for multiple hits
// 2D: Physics2D.Raycast, Physics2D.OverlapCircle, etc.

Collision vs Trigger

CallbackRequiresUse For
OnCollisionEnter/Stay/ExitBoth have colliders, at least one Rigidbody, isTrigger=falsePhysical impacts
OnTriggerEnter/Stay/ExitOne collider has isTrigger=true, at least one RigidbodyZones, pickups, detection

Always use CompareTag("Enemy") instead of other.tag == "Enemy" (avoids GC allocation).

Animation Scripting

[RequireComponent(typeof(Animator))]
public class CharacterAnimation : MonoBehaviour
{
    static readonly int SpeedHash = Animator.StringToHash("Speed");
    static readonly int JumpTrigger = Animator.StringToHash("Jump");
    Animator _anim;

    void Awake() => _anim = GetComponent<Animator>();
    void Update()
    {
        _anim.SetFloat(SpeedHash, moveSpeed);
        if (jumped) _anim.SetTrigger(JumpTrigger);
    }
}

Cache Animator.StringToHash results as static readonly fields to avoid per-frame hashing. Use Animation Events for gameplay-timed callbacks (footsteps, hit frames). For IK, implement OnAnimatorIK(int layerIndex) with SetIKPosition/Rotation/Weight.

Audio Quick Reference

[RequireComponent(typeof(AudioSource))]
public class SFXPlayer : MonoBehaviour
{
    [SerializeField] AudioClip[] clips;
    AudioSource _source;
    void Awake() => _source = GetComponent<AudioSource>();
    public void PlayRandom() => _source.PlayOneShot(clips[Random.Range(0, clips.Length)]);
}

Use AudioSource.PlayOneShot() for overlapping SFX. Use AudioMixer with exposed parameters for volume control. Use snapshots for state transitions (combat vs. exploration).

Serialization

TypeSerializedNotes
public fieldsYesVisible in Inspector
[SerializeField] privateYesPreferred -- maintains encapsulation
[HideInInspector] publicYes, hiddenSerialized but not shown
[NonSerialized] publicNoOpt-out of serialization
PropertiesNoNever serialized by Unity
DictionariesNoUse serialized list + rebuild, or Odin/SerializedDictionary
InterfacesNoUse abstract ScriptableObject or SerializeReference

Use [SerializeReference] for polymorphic serialization of interfaces and abstract types.

Common Design Patterns

PatternWhen to UseApproach
SingletonGlobal managers (Audio, GameState)ScriptableObject-based or lazy MonoBehaviour
ObserverDecoupled communicationC# events or SO event channels
CommandInput/undo systemsCommand interface + history stack
State MachineAI, player statesEnum + switch, or class-based states
Object PoolBullets, particles, enemiesQueue<T> with pre-instantiation
Service LocatorTestable global accessStatic registry with interface keys

For detailed implementations and code examples, see references/design-patterns.md.

ECS/DOTS Quick Reference

ConceptRole
EntityLightweight ID (no MonoBehaviour)
IComponentDataPure data struct on entities
SystemBase / ISystemLogic operating on component queries
EntityQueryFilter entities by component sets
Jobs (IJobEntity)Multithreaded systems
Burst CompilerSIMD-optimized native code

For ECS architecture patterns and migration guidance, see references/design-patterns.md.

Additional Resources

Reference Files

  • `references/design-patterns.md` -- Full implementations of singleton, observer, command, state machine, object pool, service locator, and ECS patterns
  • `references/physics-animation-audio.md` -- Detailed physics setup (2D and 3D), advanced animation (blend trees, IK, root motion, Animation Rigging), and audio architecture

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.