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 toproperties, you can refer to Using Component Decorators.
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 -
exportdefaultclassExampleComponentextendsAirshipBehaviour {public name ="Bob";public age =20;public favouriteColor =Color.blue;}
Default inspector for the "Example Component" object
Creating a custom inspector script
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
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
[CustomAirshipEditor("ExampleComponent")]
public class ExampleComponentEditor : AirshipEditor {
public override void OnInspectorGUI() {
EditorGUILayout.LabelField("This is a custom inspector");
}
}
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");
}
}
}