Unity Helpers

Logo

Treasure chest of Unity developer tools. Professional inspector tooling, high-performance utilities, spatial queries, and 20+ editor tools.

Getting Started with Unity Helpers

Welcome! You’re about to save yourself weeks of repetitive work.

Unity Helpers is a battle-tested toolkit that eliminates the boring, repetitive code you’re tired of writing. This guide gets you productive in 5 minutes, whether you’re a beginner or a senior engineer.

What Makes This Worth Your Time?

Three core principles that save you actual hours:

1. 🎯 Zero Boilerplate

APIs that handle the tedious stuff:

Self-documenting code:

[SiblingComponent] private Animator animator;                      // Clear intent
[ParentComponent(OnlyAncestors = true)] private Rigidbody2D rb;  // Explicit search
[ChildComponent(MaxDepth = 1)] private Collider2D[] colliders;   // Limited scope

Helpful errors that save debugging time:

2. ⚡ Performance-Proven

Measurable speed improvements:

Real-world impact:

3. ✅ Production-Ready

Quality you can trust:

What this means for you:


Choose Your Path

🎯 Path 1: “I Have a Specific Problem”

Jump directly to the solution you need:

Performance Issues?

Workflow Issues?

Architecture Issues?

📚 Path 2: “I Want to Understand Everything”

Comprehensive deep-dive (best for team leads and senior developers):

  1. Read Main Documentation - Full feature overview
  2. Review Features Documentation - Detailed API documentation
  3. Explore category-specific guides as needed

💡 Path 3: “I Learn Best from Examples”

See it working first, understand the theory later:

  1. Follow the 3 Quick Wins below
  2. Explore the Samples~ folder for DI integration examples
  3. Modify examples for your specific needs
  4. Read the detailed guides when you need to go deeper

Installation

See the Installation section in the main README for detailed installation instructions using:

After installation, verify the package appears in Window → Package Manager under “My Registries” or “In Project”.


Three Quick Wins (5 Minutes)

1. Random in 60 Seconds 🟢 Beginner

Problem: Unity’s UnityEngine.Random is slow and not seedable.

Solution:

using WallstopStudios.UnityHelpers.Core.Random;
using WallstopStudios.UnityHelpers.Core.Extension;

public class LootDrop : MonoBehaviour
{
    void Start()
    {
        // 10-15x faster than UnityEngine.Random
        IRandom rng = PRNG.Instance;

        // Basic usage
        int damage = rng.Next(10, 20);
        float chance = rng.NextFloat();

        // Advanced: weighted random selection
        string[] loot = { "Common", "Rare", "Epic", "Legendary" };
        float[] weights = { 0.6f, 0.25f, 0.10f, 0.05f };
        int index = rng.NextWeightedIndex(weights);
        Debug.Log($"Dropped: {loot[index]}");
    }
}

⚠️ Common Mistake: Don’t use UnityEngine.Random and PRNG.Instance together in the same class - pick one and stick with it for consistent results.

Learn More: Random Performance


2. Component Wiring in 60 Seconds 🟢 Beginner

Problem: Writing GetComponent calls everywhere is tedious and error-prone.

Solution:

using UnityEngine;
using WallstopStudios.UnityHelpers.Core.Attributes;

public class Player : MonoBehaviour
{
    // Auto-finds SpriteRenderer on same GameObject
    [SiblingComponent]
    private SpriteRenderer spriteRenderer;

    // Auto-finds Rigidbody2D in parent hierarchy
    [ParentComponent]
    private Rigidbody2D rigidbody;

    // Auto-finds all Collider2D in immediate children only
    [ChildComponent(OnlyDescendants = true, MaxDepth = 1)]
    private Collider2D[] childColliders;

    void Awake()
    {
        // One call wires everything!
        this.AssignRelationalComponents();

        // Now use them
        spriteRenderer.color = Color.red;
        rigidbody.velocity = Vector2.up * 5f;
        Debug.Log($"Found {childColliders.Length} child colliders");
    }
}

⚠️ Common Mistake: Don’t call AssignRelationalComponents() in Update() - it should only run once during initialization (Awake/Start).

Learn More: Relational Components


Using With DI Containers (VContainer/Zenject/Reflex)

3. Spatial Queries in 60 Seconds 🟡 Intermediate

Problem: Finding nearby objects with FindObjectsOfType and distance checks is O(n) and slow.

Solution:

using WallstopStudios.UnityHelpers.Core.DataStructure;
using UnityEngine;
using System.Collections.Generic;

public class EnemyManager : MonoBehaviour
{
    private QuadTree2D<Enemy> enemyTree;
    private List<Enemy> nearbyBuffer = new(64); // Reusable buffer

    void Start()
    {
        // Build tree once (O(n log n))
        Enemy[] enemies = FindObjectsOfType<Enemy>();
        enemyTree = new QuadTree2D<Enemy>(enemies, e => e.transform.position);
    }

    public List<Enemy> GetEnemiesNearPlayer(Vector2 playerPos, float radius)
    {
        nearbyBuffer.Clear();

        // Fast query: O(log n) instead of O(n)
        enemyTree.GetElementsInRange(playerPos, radius, nearbyBuffer);

        return nearbyBuffer;
    }
}

⚠️ Common Mistake: Spatial trees are immutable - you must rebuild the tree when enemy positions change. For frequently moving objects, use SpatialHash2D instead.

Learn More:


What Should I Learn Next?

Based on your needs:

For Gameplay Programmers

  1. Master the Effects System - Data-driven buffs/debuffs
  2. Use Spatial Trees for AI - Efficient awareness systems
  3. Learn Serialization - Save systems and networking

For Tools/Editor Programmers

  1. Explore Editor Tools - Automate your asset pipeline
  2. Use ScriptableObject Singletons - Global settings management
  3. Master Property Drawers - Better inspector workflows

For Performance-Focused Developers

  1. Study Data Structures - Choose the right container
  2. Use Advanced Math Helpers - Avoid common pitfalls
  3. Adopt the Buffering Pattern - Zero-allocation queries

Common Questions

“Is this production-ready?”

Yes! Unity Helpers is:

“Will this conflict with my existing code?”

No! Unity Helpers:

“How do I get help?”

  1. Check the Troubleshooting section in the relevant guide
  2. Search the GitHub Issues
  3. Open a new issue with code examples and error messages

“Can I use this in commercial projects?”

Yes! Unity Helpers is released under the MIT License - use it freely in commercial projects.


Next Steps

Pick one feature that solves your immediate problem:

Your Need Start Here Time to Learn
Faster random numbers Random Performance 5 min
Auto-wire components Relational Components 10 min
Spatial queries 2D Spatial Trees 15 min
Buff/debuff system Effects System 20 min
Save/load data Serialization 20 min
Editor automation Editor Tools 30 min
Global settings Singletons 10 min

Ready to dive deeper? Return to the main README for the complete feature list.

Building something cool? We’d love to hear about it! Share your experience by opening an issue.


Core Guides:

Deep Dives:

DI Integration:

Need help? Open an issue or check Troubleshooting