Getting Started with Unity Helpers¶
This guide introduces key features that can help reduce repetitive coding patterns.
Unity Helpers is a toolkit used in commercial games that reduces common boilerplate patterns in Unity development. This guide covers the top features and basic usage patterns, whether you're a beginner or a senior engineer.
Core Features¶
Three core principles:
1. 🎯 Reduced Boilerplate¶
Common APIs:
- Random selection with weights? →
random.NextWeightedIndex(weights) - Auto-wire components? →
[SiblingComponent] private Animator animator; - Gaussian distribution? Perlin noise? → Built-in, one method call
Self-documenting code:
| C# | |
|---|---|
Error messages:
- Missing components? → Full GameObject path + component type
- Invalid queries? → Explanation of what went wrong + how to fix it
- Schema issues? → Specific guidance for your serialization problem
2. ⚡ Performance Characteristics¶
Speed improvements measured in benchmarks:
- 10-15x faster in benchmarks random generation (benchmark details)
- 10-100x faster in benchmarks reflection (varies by operation; see benchmark details)
- O(log n) spatial queries tested with millions of objects (benchmark details)
- Zero GC with buffering pattern
Benchmark Results:
- Stable 60 FPS with 1000+ AI agents (benchmark details)
- No allocation spikes from pooled collections
- Deterministic replays with seedable RNG
3. ✅ Testing & Compatibility¶
- ✅ 8,000+ automated tests - Edge cases are handled through test coverage
- ✅ Shipped in commercial games - Used at scale in production
- ✅ IL2CPP/WebGL compatible - Works with aggressive compilers
- ✅ Schema evolution - Player saves maintain compatibility across updates
- ✅ SINGLE_THREADED optimized - Reduced overhead on WebGL
Key capabilities:
- Edge cases are handled through test coverage
- Consistent behavior in editor and builds
- Player data compatibility maintained across updates
Choose Your Path¶
🎯 Path 1: "I Have a Specific Problem"¶
Jump directly to the solution you need:
Performance Issues?
- Slow random number generation → Random Generators
- Too many objects to search → Spatial Queries
- Frame drops from allocations → Buffering Pattern
Workflow Issues?
- Writing too much GetComponent → Auto Component Wiring
- Manual sprite animation setup → Editor Tools
- Prefab validation problems → Prefab Checker
Architecture Issues?
- Need global settings → Singletons
- Need buff/debuff system → Effects System
- Need save/load system → Serialization
- Migrating from Odin Inspector → Odin Migration Guide
📚 Path 2: "I Want to Understand the Full Picture"¶
Full documentation overview (best for team leads and senior developers):
- Read Main Documentation - Full feature overview
- Review Features Documentation - Detailed API documentation
- Explore category-specific guides as needed
💡 Path 3: "I Learn Best from Examples"¶
See it working first, understand the theory later:
- Follow the 3 Quick Examples below
- Explore the Samples~ folder (see sample README files in the repo) for DI integration examples
- Modify examples for your specific needs
- Read the detailed guides when you need to go deeper
Installation¶
See the Installation section in the main README for detailed installation instructions using:
- OpenUPM (Recommended) — Easy version management via Package Manager or CLI
- Git URL — Direct from GitHub, great for CI/CD pipelines
- NPM Registry — For teams already using NPM scoped registries
- Source — Import
.unitypackagefrom releases, or clone the repository
After installation, verify the package appears in Window → Package Manager under "My Registries" or "In Project".
Three Quick Examples¶
Example 1: Random Generation (Beginner)¶
Problem: Unity's UnityEngine.Random is slow and not seedable.
Solution:
⚠️ Common Mistake: Don't use
UnityEngine.RandomandPRNG.Instancetogether in the same class - pick one and stick with it for consistent results.
Learn More: Random Performance
Example 2: Component Wiring (Beginner)¶
Problem: Writing GetComponent calls everywhere is tedious and error-prone.
Solution:
⚠️ Common Mistake: Don't call
AssignRelationalComponents()inUpdate()- it should only run once during initialization (Awake/Start).
Learn More: Relational Components
Using With DI Containers (VContainer/Zenject/Reflex)¶
- If you use dependency injection, you can auto-populate relational fields right after DI injection.
- Quick setup:
- VContainer: in
LifetimeScope.Configure, callbuilder.RegisterRelationalComponents(). - Zenject/Extenject: add
RelationalComponentsInstallerto yourSceneContextand (optionally) enable the scene scan on initialize. - Reflex: attach
RelationalComponentsInstalleralongside yourSceneScope. The installer binds the assigner, hydrates the active scene, and can listen for additive scenes. UseContainerRelationalExtensionshelpers (InjectWithRelations,InstantiateGameObjectWithRelations, etc.) when spawning objects through the container. - Samples: See sample folders in the repository for VContainer, Zenject, and Reflex integration examples
- Full guide with scenarios and testing tips: Dependency Injection Integrations
Example 3: Spatial Queries (Intermediate)¶
Problem: Finding nearby objects with FindObjectsOfType and distance checks is O(n) and slow.
Solution:
⚠️ Common Mistake: Spatial trees are immutable - you must rebuild the tree when enemy positions change. For frequently moving objects, use
SpatialHash2Dinstead.
Learn More:
What Should I Learn Next?¶
Based on your needs:
For Gameplay Programmers¶
- Master the Effects System - Data-driven buffs/debuffs
- Start: Effects System TL;DR
-
Why: Build status effects without writing repetitive code
-
Use Spatial Trees for AI - Efficient awareness systems
- Start: Spatial Trees 2D Guide
-
Why: Make enemy AI scale to hundreds of units
-
Learn Serialization - Save systems and networking
- Start: Serialization Guide
- Why: Save/load with Unity types supported
For Tools/Editor Programmers¶
- Explore Editor Tools - Automate your asset pipeline
- Start: Editor Tools Guide
-
Why: 20+ tools for sprites, animations, validation, and more
-
Use ScriptableObject Singletons - Global settings management
- Start: Singletons Guide
-
Why: Auto-created, Odin-compatible config assets
-
Master Property Drawers - Better inspector workflows
- Start: Property Drawers
- Why: Conditional fields, dropdowns, validation
For Performance-Focused Developers¶
- Study Data Structures - Choose the right container
- Start: Data Structures Guide
-
Why: Heaps, tries, sparse sets, and more with clear trade-offs
-
Use Math Helpers - Avoid common pitfalls
- Start: Math & Extensions
-
Why: Modulo, geometry, color averaging, and more
-
Adopt the Buffering Pattern - Zero-allocation queries
- Start: Buffering Pattern
- Why: Stable GC even under load
Common Questions¶
"Is this production-ready?"¶
Yes! Unity Helpers is:
- ✅ Used in shipped commercial games
- ✅ 8,000+ automated test cases
- ✅ Compatible with Unity 2022, 2023, and Unity 6
- ✅ Zero external dependencies — protobuf-net is bundled
- ✅ Fully WebGL/IL2CPP compatible with optimized SINGLE_THREADED hot paths
- ✅ Multiplatform support - Desktop, Mobile, Web, and Consoles
- ⚠️ Requires .NET Standard 2.1
"Will this conflict with my existing code?"¶
No! Unity Helpers:
- ✅ Uses namespaces (
WallstopStudios.UnityHelpers.*) - ✅ Doesn't modify Unity types or global state
- ✅ Opt-in design - use what you need
"How do I get help?"¶
- Check the Troubleshooting section in the relevant guide
- Search the GitHub Issues
- 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.
📚 Related Documentation¶
Core Guides:
- Main README - Complete feature overview
- Feature Index - Alphabetical reference
- Glossary - Term definitions
- Odin Migration Guide - Migrate from Odin Inspector
Deep Dives:
- Relational Components - Auto-wiring guide
- Effects System - Buff/debuff system
- Spatial Trees 2D - Fast spatial queries
- Serialization - Save systems and networking
- Editor Tools - Asset pipeline automation
DI Integration:
- VContainer Sample - VContainer integration guide (see Samples~ folder in repo)
- Zenject Sample - Zenject integration guide (see Samples~ folder in repo)
Need help? Open an issue or check Troubleshooting