- Home /
Question by
solocs · Jun 29, 2019 at 04:42 AM ·
booleanlistscustom editorpropertydrawer
How do I hide elements from a child class embedded in a List on the Inspector in the CustomEditor?
There is a boolean for each 'Quest' class made which, when toggled, is supposed to hide/reveal yet another List of class 'Objective_Killing' shown here https://imgur.com/a/0ew8tQO
But I have no luck in trying to make the functionality work because I can't find a way to affect elements of a class property within another class property. Someone please help me with this.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class NPCQuestList : MonoBehaviour
{
public List<GameObject> questObjList = new List<GameObject>();
public Quest[] questsAvailable;
}
}
[System.Serializable]
public class Quest
{
public bool inProgress;
public string questName;
public string description;
public bool has_killing_objective;
public Objective_Killing[] killing_Objective;
}
[System.Serializable]
public class Objective_Killing
{
public string target;
public int currentkillcount;
public int maxkillcount;
public bool objectiveComplete;
}
CustomEditor script
[CustomEditor(typeof(NPCQuestList))]
public class QuestEditor : Editor
{
bool questObjListToggle;
bool questListToggle;
public override void OnInspectorGUI()
{
SerializedProperty sp = serializedObject.FindProperty("questsAvailable");
SerializedProperty killingObjBoolSP = sp.GetArrayElementAtIndex(0).FindPropertyRelative("has_killing_objective");
NPCQuestList questScript = (NPCQuestList) target;
SerializedObject so = sp.GetArrayElementAtIndex(0).serializedObject;
questObjListToggle = GUILayout.Toggle(questObjListToggle, "Enable Quest Objective List");
questListToggle = GUILayout.Toggle(questListToggle, "Enable Quest List");
List<string> excludedElements = new List<string>();
if (!questObjListToggle) { excludedElements.Add("questObjList"); }
if (!questListToggle) { excludedElements.Add("questsAvailable"); }
if (!killingObjBoolSP.boolValue) { excludedElements.Add("killing_Objective"); }
DrawPropertiesExcluding(serializedObject, excludedElements.ToArray());
serializedObject.ApplyModifiedProperties();
}
}
Comment
Your answer
Follow this Question
Related Questions
Property Drawer SerializedProperty is null 2 Answers
How do I make individual buttons change individual variables? 0 Answers
ScriptableObjects lists (from the same script) open simultaneously in custom window 0 Answers
SerializedObject.FindProperty returning null 2 Answers
Really weird behaviour with boolean variables from custom class 2 Answers