Custom Inspectors (C#)

circle-info

flask-round-potion This is currently a beta feature being tested in Airship and includes a rewrite of the inspector system. The API is subject to change.

While Airship will generate a default inspector for AirshipBehaviour components, you may want to create a custom inspector to:

  • Create a more user-friendly interface for complex components

  • Organize and group properties

  • Conditionally show/hide UI based on user choices.

If you need to just categorize or add constraints to properties, you can refer to Using Component Decorators.

circle-info

Currently editor scripts can only be written through the C# AirshipEditor API. Support for TypeScript-based editor scripts may come in future.

You can declare an AirshipBehaviour as per usual -

export default class ExampleComponent extends AirshipBehaviour {
    public name = "Bob";
    public age = 20;
    public favouriteColor = Color.blue;
}
Default inspector for the "Example Component" object

Creating a custom inspector script

circle-info

Airship only supports using IMGUI for custom inspectors at this time.

Creating a custom inspector for any Airship serialized object is pretty straightforward. You will need to create a class that derives from AirshipEditor and add the AirshipEditor attribute to it. This will let Airship know what class this custom inspector represents.

Custom Inspector with label
circle-info

You should make sure that your editor scripts are in an Editor folder.

AirshipEditor is similar to UnityEngine.Editor and contains Airship parallels to the unity custom editor API

  • It contains a serializedObject and target property

  • You can access airship properties via serializedObject.FindAirshipProperty("propertyName") - this will return an AirshipSerializedValue which you can use to check or modify the property with; similar to SerializedProperty.

  • You can render properties using the Airship editor system using AirshipEditorGUI.PropertyField(airshipProperty) by default, however you are not limited to it.

Example 1: Showing/Hiding properties based on user choices

There may be cases where you want to show/hide properties based on what the user has selected

The resulting inspector behaviour:

With 'hidden properties' unchecked
With 'hidden properties' checked
With 'hidden number' > 100

Last updated