Page 1 of 1
Fields disappearing when inheriting from Standard UI Menu Panel?
Posted: Sat Jan 09, 2021 8:07 am
by alexlol
Hi,
I've extended the Standard UI Menu Panel class to add a couple of custom functions. Included in this new script are a few public fields to assign, including a gameobject, transform and audio source.
However, when I inherit from Standard UI Menu Panel, all of my public fields from the derived script disappear, leaving only the inherited ones. If I remove the inheritance and inherit from Monobehaviour, my fields reappear. I'm not getting any warnings about hiding inherited members.
I can't seem to figure out the problem - is this standard behaviour or something specific to Dialogue System? Would really appreciate a pointer in the right direction! Thanks.
Re: Fields disappearing when inheriting from Standard UI Menu Panel?
Posted: Sat Jan 09, 2021 8:45 am
by Tony Li
Hi,
Are you talking about your custom fields not appearing in the inspector?
If so, this is because StandardUIMenuPanel uses a custom inspector script named StandardUIMenuPanelEditor. You can subclass it to show your custom fields. Create a new script in any folder named Editor, such as:
CustomMenuPanelEditor.cs
Code: Select all
using UnityEngine;
using UnityEditor;
using PixelCrushers.DialogueSystem;
[CustomEditor(typeof(CustomMenuPanel))]
public class CustomMenuPanelEditor : StandardUIMenuPanelEditor
{
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
serializedObject.Update();
// Your code here to show your custom fields. Example:
EditorGUILayout.PropertyField(serializedObject.FindProperty(nameof(CustomMenuPanel.myCustomField1)), true);
EditorGUILayout.PropertyField(serializedObject.FindProperty(nameof(CustomMenuPanel.myCustomField2)), true);
serializedObject.ApplyModifiedProperties();
}
}
Re: Fields disappearing when inheriting from Standard UI Menu Panel?
Posted: Sat Jan 09, 2021 9:46 am
by alexlol
I'm referring to publicly exposing objects so I can assign them in the inspector - is that the same thing? Sorry, I'm a bit new to inspector stuff
Re: Fields disappearing when inheriting from Standard UI Menu Panel?
Posted: Sat Jan 09, 2021 11:08 am
by Tony Li
Yes, that's the same thing. For example, say you've made a subclass like this:
Code: Select all
public class CustomMenuPanel : StandardUIMenuPanel
{
public int numMenusShown; // Counts # of times ShowResponses is called this play session.
public override void ShowResponses(Subtitle subtitle, Response[] responses, Transform target)
{
base.ShowResponses(subtitle, responses, target);
numMenusShown++;
}
}
Then you'd need to create an Editor script like this to show the "numMenusShown" variable:
Code: Select all
using UnityEngine;
using UnityEditor;
using PixelCrushers.DialogueSystem;
[CustomEditor(typeof(CustomMenuPanel))]
public class CustomMenuPanelEditor : StandardUIMenuPanelEditor
{
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
serializedObject.Update();
// Show the numMenusShown field:
EditorGUILayout.PropertyField(serializedObject.FindProperty(nameof(CustomMenuPanel.numMenusShown)), true);
serializedObject.ApplyModifiedProperties();
}
}
Re: Fields disappearing when inheriting from Standard UI Menu Panel?
Posted: Sat Jan 09, 2021 11:13 am
by alexlol
Understood, thanks!