Unity Helpers

Logo

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

Inspector & Serialization Features Overview

Stop writing boilerplate. Start designing in the inspector.

Unity Helpers includes a powerful suite of inspector attributes and serialization types that transform how you author components and data. These features eliminate repetitive code, provide designer-friendly workflows, and make your inspector experience rival commercial tools like Odin Inspector.


Why Use These Features?

Time Savings:

Professional Quality:


Feature Categories

1. Layout & Organization

Control how fields are grouped and organized in the inspector:

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

public class TwoWGroupExample : MonoBehaviour
{
    [WGroup("Group 1", collapsible: true)]
    public float health;
    public int intValue;
    public string stringValue;

    [WGroup("Group 2", collapsible: true)]
    public float speed;
    public int otherIntValue;
    public string otherStringValue;
}

WGroup collapsed and expanded states

→ Full Guide: Inspector Grouping Attributes


2. Inline Editing

Edit nested objects without losing context:

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

[CreateAssetMenu(fileName = "PowerUpDefinition", menuName = "Power-Up Definition")]
public class PowerUpDefinition : ScriptableObject
{
    public string powerUpName;
    public Sprite icon;
}

public class WInLineEditorSimpleExample : MonoBehaviour
{
    [WInLineEditor]
    public PowerUpDefinition powerUp;
}

WInLineEditor showing embedded ScriptableObject inspector WInLineEditor foldout expand/collapse animation

→ Full Guide: Inspector Inline Editor


3. Method Invocation

Expose methods as clickable buttons in the inspector:

using System;
using System.Collections;
using System.Threading;
using System.Threading.Tasks;
using UnityEngine;
using WallstopStudios.UnityHelpers.Core.Attributes;
using WallstopStudios.UnityHelpers.Core.Extension;

public class WButtonOverviewExample : MonoBehaviour
{
    [WButton]
    private void Test1()
    {
        this.Log($"We did it!");
    }

    [WButton]
    private IEnumerator KindaCoroutine()
    {
        this.Log($"Starting coroutine...");
        yield return new WaitForSeconds(1f);
        this.Log($"Coroutine finished!");
    }

    [WButton]
    private async Task AsyncWorksToo()
    {
        await Task.Delay(TimeSpan.FromSeconds(1));
        this.Log($"Did it work?");
    }

    [WButton]
    private async Task AsyncWorksTooWithCancellationTokens(CancellationToken ct)
    {
        await Task.Delay(TimeSpan.FromSeconds(1), ct);
        this.Log($"Did it work?");
    }

    [WButton]
    private async ValueTask ValueTasks(CancellationToken ct)
    {
        await Task.Delay(TimeSpan.FromSeconds(1), ct);
        this.Log($"Did it work?");
    }
}

WButton examples showing void, async, and history WButton executing async method and result display

→ Full Guide: Inspector Buttons


4. Conditional Display

Show or hide fields based on runtime values:

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

public enum ExampleEnum
{
    Option1,
    Option2,
    Option3,
}

public class WShowIfExamples : MonoBehaviour
{
    public bool toggle;

    [WShowIf(nameof(toggle))]
    public string hiddenByBool;

    public int intValue;

    [WShowIf(nameof(intValue), WShowIfComparison.GreaterThan, 5)]
    public string hiddenByInt;

    public ExampleEnum enumValue;

    [WShowIf(nameof(enumValue), ExampleEnum.Option2, ExampleEnum.Option3)]
    public string hiddenByEnum;
}

WShowIf examples showing visibility based on bool, int, and enum

→ Full Guide: Inspector Conditional Display


5. Selection & Dropdowns

Provide designer-friendly selection controls:

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

public class WEnumToggleButtonOverview : MonoBehaviour
{
    [WEnumToggleButtons]
    [IntDropDown(1, 2, 3, 4, 5, 6, 7, 8)]
    public List<int> canToggle; // Works in lists!

    [WEnumToggleButtons]
    [IntDropDown(1, 2, 3, 4, 5, 6, 7, 8)]
    public int canToggle2;

    [StringInList(typeof(WEnumToggleButtonOverview), nameof(GetStringValues))]
    public string canSelectString;

    [WValueDropDown(typeof(WEnumToggleButtonOverview), nameof(GetFloatValues))]
    public float canSelectFloat;

    private IEnumerable<string> GetStringValues()
    {
        yield return "String1";
        yield return "String2";
        yield return "String3";
    }

    private IEnumerable<float> GetFloatValues()
    {
        yield return 1.0f;
        yield return 2.0f;
        yield return 3.0f;
    }
}

WEnumToggleButtons, StringInList, and WValueDropDown examples

→ Full Guide: Inspector Selection Attributes


6. Validation & Protection

Protect data integrity with validation attributes:

→ Full Guide: Inspector Validation Attributes


7. Serialization Types

Unity-friendly wrappers for complex data:

WGuid, dictionary, sets, types, nullables in action

→ Full Guide: Serialization Types


8. Project Settings

Centralized configuration for all inspector features:

Location: ProjectSettings/UnityHelpersSettings.asset

Settings:

UnityHelpersSettings inspector showing all configuration options

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

public class WButtonSettingsExample : MonoBehaviour
{
    [WButton(colorKey: "Documentation Example")]
    private void Button() { }
}

Changing color palette and seeing instant update in inspector

→ Full Guide: Inspector Settings


Quick Start Example

Here’s a complete example showcasing multiple inspector features together:

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

public class CharacterStats : MonoBehaviour
{
    // Grouped fields with collapsible sections
    [WGroup("Combat", "Combat Stats", collapsible: true)]
    public float maxHealth = 100f;           // In group
    public float defense = 10f;              // In group (auto-included)
    [WGroupEnd("Combat")]                    // attackPower IS included, then closes
    public float attackPower = 25f;          // In group (last field)

    // Conditional visibility based on enum
    public enum WeaponType { Melee, Ranged, Magic }
    public WeaponType weaponType;

    [WShowIf(nameof(weaponType), WShowIfComparison.Equal, WeaponType.Ranged)]
    public int ammoCapacity = 30;

    // Flag enum as toggle buttons
    [System.Flags]
    public enum Abilities { None = 0, Jump = 1, Dash = 2, Block = 4 }

    [WEnumToggleButtons(showSelectAll: true)]
    public Abilities unlockedAbilities;

    // Serializable collections
    public SerializableDictionary<string, int> stats;
    public WGuid entityId = WGuid.NewGuid();

    // Inspector button
    [WButton("Reset Stats")]
    private void ResetStats() => maxHealth = defense = attackPower = 100f;
}

For individual feature examples, see the detailed guides linked above.


Feature Comparison

Feature Unity Default Odin Inspector Unity Helpers
Grouping/Boxes Custom Editor [BoxGroup] [WGroup]
Foldouts Custom Editor [FoldoutGroup] [WGroup(collapsible: true)]
Method Buttons Custom Editor [Button] [WButton]
Conditional Display Custom Drawer [ShowIf] [WShowIf]
Enum Toggles Custom Drawer [EnumToggleButtons] [WEnumToggleButtons]
Dictionaries Not Supported [ShowInInspector] SerializableDictionary<K,V>
Sets Not Supported Custom SerializableHashSet<T>
Type References Not Supported Custom SerializableType
Nullable Values Not Supported Custom SerializableNullable<T>
Color Themes Not Supported Built-in Project Settings
Cost Free $55-$95 Free (MIT)

Design Philosophy

Declarative Over Imperative:

Designer-Friendly:

Performance-Conscious:

Project-Consistent:


Getting Started

  1. Install Unity Helpers - See Installation Guide

  2. Explore Examples - Check the guides linked above

  3. Configure Settings - Open ProjectSettings/UnityHelpersSettings.asset to customize pagination, colors, and animations

  4. Add Attributes - Start with [WGroup] and [WButton] for immediate impact

  5. Use Serialization Types - Replace custom wrappers with SerializableDictionary, SerializableSet, etc.


Detailed Documentation

Inspector Attributes

Serialization

Configuration


See Also


Next Steps:

Choose a guide based on what you want to learn first: