Create a Custom Inspector (C#)

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.

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

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.

Assets/Editor/ExampleComponentInspector.cs
[CustomAirshipEditor("ExampleComponent")]
public class ExampleComponentEditor : AirshipEditor {
    public override void OnInspectorGUI() {
        EditorGUILayout.LabelField("This is a custom inspector");
    }
}
Custom Inspector with label

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

Assets/Code/ExampleComponent.ts
export default class ExampleComponent extends AirshipBehaviour {
	public name: string;
	public color = Color.blue;

	public hiddenProperties = false;
	public hiddenNumber: number;
	public hiddenBoolean: boolean;
	public hiddenString: string;
}
Assets/Editor/ExampleComponentInspector.cs
[CustomAirshipEditor("ExampleComponent")]
public class ExampleComponentEditor : AirshipEditor {
    public override void OnInspectorGUI() {
        // PropertyField here can be used as shortcut to show property fields
        PropertyField("name");
        PropertyField("color"); 
        
        // If the property is a boolean one, it can be used to conditionally check
        if (PropertyField("hiddenProperties")) {
            // Properties can also be queried using 'FindAirshipProperty'
            var secretValue = serializedObject.FindAirshipProperty("hiddenNumber");
            PropertyField(secretValue);
            
            // values of properties can be queried as well!
            if (secretValue.numberValue > 100) {
                EditorGUILayout.LabelField("The number is greater than 100!");
            }
            // You can also show multiple properties in one line
            PropertyFields("hiddenBoolean", "hiddenString");
        }
    }
}

The resulting inspector behaviour:

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

Last updated