unity

Unity Engine Development Skill

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "unity" with this command: npx skills add yuemori/unitymcptest/yuemori-unitymcptest-unity

Unity Engine Development Skill

Comprehensive assistance with Unity game development, covering C# scripting, scene management, physics, rendering, animation, UI, and platform-specific features.

When to Use This Skill

This skill should be triggered when working with:

  • Unity Engine projects (2D/3D game development)

  • C# scripting in Unity (MonoBehaviour, Coroutines, ScriptableObjects)

  • Scene setup and GameObject hierarchy management

  • Physics systems (Rigidbody, Colliders, Joints, Character Controllers)

  • Animation and Animator systems (Animation Clips, Blend Trees, State Machines)

  • Rendering pipelines (Built-in, URP, HDRP) and shaders (ShaderLab, Shader Graph)

  • UI development (UI Toolkit, UGUI, Canvas, TextMeshPro)

  • XR/VR/AR development (XR Interaction Toolkit)

  • Asset management and optimization

  • Platform-specific builds (iOS, Android, WebGL, PC/Console)

  • Editor extensions and custom tools

Unity-MCP Integration

This skill can be combined with Unity-MCP for live Unity Editor control!

Unity Skill (Documentation) + Unity-MCP (Actions) = Complete AI-powered development

  • Unity Skill: Provides documentation, patterns, and best practices (3,367 pages)

  • Unity-MCP: Executes code, creates assets, and automates workflows in your Unity Editor

  • Together: Learn patterns from docs → Apply instantly to your project

See UNITY_MCP_INTEGRATION.md for complete setup guide.

Quick Reference

Essential Unity Patterns

  1. MonoBehaviour Lifecycle

using UnityEngine;

public class GameController : MonoBehaviour { // Called once when script instance is being loaded void Awake() { // Initialize references and setup before Start() }

// Called once before first frame update
void Start()
{
    // Initialization logic that depends on other objects
}

// Called every frame
void Update()
{
    // Input handling and frame-based logic
}

// Called at fixed time intervals (physics)
void FixedUpdate()
{
    // Physics-related code (Rigidbody forces, etc.)
}

// Called after all Update functions
void LateUpdate()
{
    // Camera following, post-processing logic
}

// Called when object becomes enabled/active
void OnEnable() { }

// Called when object becomes disabled/inactive
void OnDisable() { }

// Called when MonoBehaviour will be destroyed
void OnDestroy()
{
    // Cleanup logic (unsubscribe events, etc.)
}

}

  1. Coroutines for Asynchronous Operations

using System.Collections; using UnityEngine;

public class CoroutineExample : MonoBehaviour { void Start() { StartCoroutine(DelayedAction()); StartCoroutine(FadeOut(GetComponent<SpriteRenderer>(), 2.0f)); }

// Simple delay
IEnumerator DelayedAction()
{
    yield return new WaitForSeconds(2.0f);
    Debug.Log("Executed after 2 seconds");
}

// Fade out over time
IEnumerator FadeOut(SpriteRenderer sprite, float duration)
{
    float elapsed = 0f;
    Color startColor = sprite.color;

    while (elapsed &#x3C; duration)
    {
        elapsed += Time.deltaTime;
        float alpha = Mathf.Lerp(1f, 0f, elapsed / duration);
        sprite.color = new Color(startColor.r, startColor.g, startColor.b, alpha);
        yield return null; // Wait for next frame
    }
}

}

  1. ScriptableObjects for Data Management

using UnityEngine;

[CreateAssetMenu(fileName = "New Weapon", menuName = "Game/Weapon")] public class WeaponData : ScriptableObject { public string weaponName; public int damage; public float fireRate; public Sprite icon; public GameObject projectilePrefab; }

// Usage in MonoBehaviour public class WeaponSystem : MonoBehaviour { [SerializeField] private WeaponData currentWeapon;

public void Fire()
{
    if (currentWeapon != null)
    {
        GameObject projectile = Instantiate(
            currentWeapon.projectilePrefab,
            transform.position,
            transform.rotation
        );
    }
}

}

  1. Physics-Based Movement

using UnityEngine;

[RequireComponent(typeof(Rigidbody))] public class PlayerMovement : MonoBehaviour { [SerializeField] private float moveSpeed = 5f; [SerializeField] private float jumpForce = 10f; [SerializeField] private LayerMask groundLayer;

private Rigidbody rb;
private bool isGrounded;

void Awake()
{
    rb = GetComponent&#x3C;Rigidbody>();
}

void FixedUpdate()
{
    // Check if grounded
    isGrounded = Physics.Raycast(
        transform.position,
        Vector3.down,
        1.1f,
        groundLayer
    );

    // Movement
    float horizontal = Input.GetAxis("Horizontal");
    float vertical = Input.GetAxis("Vertical");

    Vector3 movement = new Vector3(horizontal, 0f, vertical);
    rb.AddForce(movement * moveSpeed);
}

void Update()
{
    // Jump
    if (Input.GetButtonDown("Jump") &#x26;&#x26; isGrounded)
    {
        rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
    }
}

}

  1. Object Pooling Pattern

using System.Collections.Generic; using UnityEngine;

public class ObjectPool : MonoBehaviour { [SerializeField] private GameObject prefab; [SerializeField] private int poolSize = 20;

private Queue&#x3C;GameObject> pool = new Queue&#x3C;GameObject>();

void Start()
{
    for (int i = 0; i &#x3C; poolSize; i++)
    {
        GameObject obj = Instantiate(prefab);
        obj.SetActive(false);
        pool.Enqueue(obj);
    }
}

public GameObject GetObject()
{
    if (pool.Count > 0)
    {
        GameObject obj = pool.Dequeue();
        obj.SetActive(true);
        return obj;
    }
    else
    {
        // Expand pool if needed
        GameObject obj = Instantiate(prefab);
        return obj;
    }
}

public void ReturnObject(GameObject obj)
{
    obj.SetActive(false);
    pool.Enqueue(obj);
}

}

  1. Singleton Pattern

using UnityEngine;

public class GameManager : MonoBehaviour { private static GameManager _instance;

public static GameManager Instance
{
    get
    {
        if (_instance == null)
        {
            _instance = FindObjectOfType&#x3C;GameManager>();

            if (_instance == null)
            {
                GameObject go = new GameObject("GameManager");
                _instance = go.AddComponent&#x3C;GameManager>();
            }
        }
        return _instance;
    }
}

void Awake()
{
    if (_instance != null &#x26;&#x26; _instance != this)
    {
        Destroy(gameObject);
        return;
    }

    _instance = this;
    DontDestroyOnLoad(gameObject);
}

}

  1. Event System Pattern

using System; using UnityEngine;

public class EventManager : MonoBehaviour { public static event Action OnGameStart; public static event Action<int> OnScoreChanged; public static event Action OnGameOver;

public static void TriggerGameStart()
{
    OnGameStart?.Invoke();
}

public static void TriggerScoreChanged(int newScore)
{
    OnScoreChanged?.Invoke(newScore);
}

public static void TriggerGameOver()
{
    OnGameOver?.Invoke();
}

}

// Usage: Subscribe and unsubscribe public class UIController : MonoBehaviour { void OnEnable() { EventManager.OnScoreChanged += UpdateScoreDisplay; EventManager.OnGameOver += ShowGameOverScreen; }

void OnDisable()
{
    EventManager.OnScoreChanged -= UpdateScoreDisplay;
    EventManager.OnGameOver -= ShowGameOverScreen;
}

void UpdateScoreDisplay(int score)
{
    // Update UI
}

void ShowGameOverScreen()
{
    // Show game over
}

}

  1. 2D Character Controller

using UnityEngine;

[RequireComponent(typeof(Rigidbody2D))] public class CharacterController2D : MonoBehaviour { [SerializeField] private float moveSpeed = 5f; [SerializeField] private float jumpForce = 10f; [SerializeField] private Transform groundCheck; [SerializeField] private LayerMask groundLayer;

private Rigidbody2D rb;
private bool isGrounded;
private bool facingRight = true;

void Awake()
{
    rb = GetComponent&#x3C;Rigidbody2D>();
}

void Update()
{
    // Ground check
    isGrounded = Physics2D.OverlapCircle(
        groundCheck.position,
        0.2f,
        groundLayer
    );

    // Movement input
    float moveInput = Input.GetAxis("Horizontal");
    rb.velocity = new Vector2(moveInput * moveSpeed, rb.velocity.y);

    // Flip character
    if (moveInput > 0 &#x26;&#x26; !facingRight)
        Flip();
    else if (moveInput &#x3C; 0 &#x26;&#x26; facingRight)
        Flip();

    // Jump
    if (Input.GetButtonDown("Jump") &#x26;&#x26; isGrounded)
    {
        rb.velocity = new Vector2(rb.velocity.x, jumpForce);
    }
}

void Flip()
{
    facingRight = !facingRight;
    Vector3 scale = transform.localScale;
    scale.x *= -1;
    transform.localScale = scale;
}

}

  1. UI Toolkit (Runtime UI)

using UnityEngine; using UnityEngine.UIElements;

public class UIController : MonoBehaviour { private UIDocument uiDocument; private Label scoreLabel; private Button startButton;

void OnEnable()
{
    uiDocument = GetComponent&#x3C;UIDocument>();
    var root = uiDocument.rootVisualElement;

    // Query elements
    scoreLabel = root.Q&#x3C;Label>("score-label");
    startButton = root.Q&#x3C;Button>("start-button");

    // Register callbacks
    startButton.clicked += OnStartButtonClicked;
}

void OnDisable()
{
    startButton.clicked -= OnStartButtonClicked;
}

void OnStartButtonClicked()
{
    Debug.Log("Game started!");
}

public void UpdateScore(int score)
{
    scoreLabel.text = $"Score: {score}";
}

}

  1. Basic Shader (ShaderLab)

Shader "Custom/SimpleTextureShader" { Properties { _MainTex ("Texture", 2D) = "white" {} _Color ("Tint Color", Color) = (1,1,1,1) _Brightness ("Brightness", Range(0, 2)) = 1 }

SubShader
{
    Tags { "RenderType"="Opaque" }
    LOD 100

    Pass
    {
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        #include "UnityCG.cginc"

        struct appdata
        {
            float4 vertex : POSITION;
            float2 uv : TEXCOORD0;
        };

        struct v2f
        {
            float2 uv : TEXCOORD0;
            float4 vertex : SV_POSITION;
        };

        sampler2D _MainTex;
        float4 _MainTex_ST;
        float4 _Color;
        float _Brightness;

        v2f vert (appdata v)
        {
            v2f o;
            o.vertex = UnityObjectToClipPos(v.vertex);
            o.uv = TRANSFORM_TEX(v.uv, _MainTex);
            return o;
        }

        fixed4 frag (v2f i) : SV_Target
        {
            fixed4 col = tex2D(_MainTex, i.uv);
            col *= _Color * _Brightness;
            return col;
        }
        ENDCG
    }
}

}

Reference Files

This skill includes comprehensive documentation organized by topic in references/ :

Core Topics

  • getting_started.md - Installation, project setup, and Unity basics (4 pages)

  • scripting.md - C# scripting, MonoBehaviour, coroutines, assemblies (8 pages)

  • scene_management.md - Scene creation, GameObjects, Transforms, Prefabs (38 pages)

2D/3D Development

  • 2d.md - Sprites, Tilemaps, 2D physics, 2D animation (85 pages)

  • 3d.md - 3D meshes, terrain, ProBuilder, lighting (30 pages)

Systems

  • physics.md - Rigidbody, Colliders, Joints, Character Controllers (114 pages)

  • animation.md - Animation clips, Animator, Timeline, Blend Trees (11 pages)

  • audio.md - AudioSource, AudioMixer, spatial audio (32 pages)

Rendering & Graphics

  • rendering.md - Cameras, lighting, post-processing, VFX (45 pages)

  • shaders.md - ShaderLab, Shader Graph, URP, HDRP, materials (631 pages)

UI & Interface

  • ui.md - UI Toolkit, UGUI, Canvas, TextMeshPro (16 pages)

Advanced Topics

  • xr.md - VR/AR development, XR Interaction Toolkit (238 pages)

  • editor.md - Custom editors, EditorWindows, MenuItem (8 pages)

  • optimization.md - Profiling, memory management, best practices (34 pages)

Platform & Services

  • platform.md - iOS, Android, WebGL, build settings (16 pages)

  • assets.md - Asset workflow, AssetBundles, Addressables (27 pages)

  • networking.md - Multiplayer, Netcode, networking systems (19 pages)

  • services.md - Unity Services, Analytics, Cloud Build (9 pages)

Additional Resources

  • other.md - Miscellaneous topics and advanced features (1,707 pages)

  • index.md - Complete documentation index

Total Documentation: 3,367 pages from official Unity Manual and Scripting API

Use the view tool to read specific reference files when detailed information is needed.

Working with This Skill

For Beginners

  • Start with references/getting_started.md for Unity installation and basics

  • Review MonoBehaviour lifecycle pattern above

  • Learn GameObject and Transform basics in references/scene_management.md

  • Explore simple scripting examples in references/scripting.md

For Intermediate Developers

  • Study physics systems in references/physics.md

  • Implement animation systems using references/animation.md

  • Build UI with references/ui.md

  • Optimize performance with references/optimization.md

For Advanced Developers

  • Create custom shaders: references/shaders.md

  • Build custom editor tools: references/editor.md

  • Develop VR/AR experiences: references/xr.md

  • Optimize for specific platforms: references/platform.md

For Specific Tasks

  • 2D game: Check references/2d.md for Sprites, Tilemaps, 2D Physics

  • 3D game: Review references/3d.md and references/rendering.md

  • Mobile game: See references/platform.md for iOS/Android

  • Multiplayer: Explore references/networking.md

  • VR/AR: Study references/xr.md

Key Concepts

Unity Architecture

  • GameObjects: Container objects that hold Components

  • Components: Modular behaviors (Transform, Rigidbody, scripts, etc.)

  • Prefabs: Reusable GameObject templates

  • Scenes: Levels or sections of your game

  • Assets: Files used in your project (textures, models, audio, etc.)

Scripting Best Practices

  • Use Awake() for initialization, Start() for setup

  • Physics code goes in FixedUpdate()

  • Use coroutines for time-based operations

  • Avoid FindObjectOfType() in Update loops (cache references)

  • Use object pooling for frequently instantiated objects

  • Implement proper event cleanup (unsubscribe in OnDisable/OnDestroy)

  • Use ScriptableObjects for game data

  • Follow naming conventions (PascalCase for public, camelCase for private)

Performance Optimization

  • Enable Static Batching for static objects

  • Use Dynamic Batching for moving objects

  • Implement Level of Detail (LOD) for distant objects

  • Use occlusion culling to skip rendering hidden objects

  • Profile with Unity Profiler to identify bottlenecks

  • Optimize draw calls by sharing materials

  • Use object pooling instead of Instantiate/Destroy

  • Minimize GetComponent calls (cache components)

  • Avoid empty Update methods

Physics Tips

  • Use layers and layer collision matrix to optimize collision detection

  • Choose appropriate collision detection mode (Discrete vs. Continuous)

  • Use FixedUpdate for physics operations

  • Raycasts are cheaper than colliders for simple checks

  • Use Physics.OverlapSphere instead of trigger colliders when possible

  • Avoid moving objects with Transform when using physics (use Rigidbody)

Rendering Pipeline Comparison

  • Built-in: Legacy, full-featured, good compatibility

  • URP (Universal): Modern, optimized, mobile-friendly, flexible

  • HDRP (High Definition): High-end graphics, PC/Console only

Resources

Official Documentation

Learning Resources

  • Unity Learn: Official tutorials and courses

  • Unity Blog: Latest features and best practices

  • Unity Forum: Community help and discussions

Useful Packages

  • Input System (com.unity.inputsystem): Modern input handling

  • Cinemachine (com.unity.cinemachine): Advanced camera system

  • ProBuilder (com.unity.probuilder): In-editor 3D modeling

  • TextMeshPro: Advanced text rendering

  • XR Interaction Toolkit: VR/AR interactions

  • Netcode for GameObjects: Multiplayer networking

  • Universal RP / HDRP: Render pipelines

  • Timeline: Cinematic sequencing

  • Addressables: Advanced asset management

Common Namespaces

using UnityEngine; // Core Unity classes using UnityEngine.UI; // UGUI components using UnityEngine.UIElements; // UI Toolkit using UnityEngine.SceneManagement; // Scene loading using System.Collections; // IEnumerator for coroutines using System.Collections.Generic; // Lists, Dictionaries

scripts/

Add helper scripts here for common automation tasks and utilities.

assets/

Add templates, boilerplate code, or example Unity project files here.

Notes

  • This skill covers Unity 2023.2+ (Unity 6.x compatible)

  • All code examples follow Unity C# coding standards

  • Reference files link to official Unity documentation

  • Script Reference API included for detailed class information

  • URP (Universal Render Pipeline) is the recommended pipeline for new projects

  • Always test on target platforms early in development

Updating

To refresh this skill with updated Unity documentation:

  • Update the Unity config with the latest version URL

  • Re-run the scraper: skill-seekers scrape --config configs/unity.json

  • The skill will be rebuilt with the latest Unity documentation

This skill was generated from official Unity documentation (Manual + Scripting API) covering 3,367 pages of comprehensive Unity Engine information.

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

unity

No summary provided by upstream source.

Repository SourceNeeds Review
General

unity

No summary provided by upstream source.

Repository SourceNeeds Review
General

unity

No summary provided by upstream source.

Repository SourceNeeds Review