- Home /
Question by
DeathoCZ · Jun 23, 2021 at 01:57 PM ·
inspectorcustom editorcustom inspector
Custom editor UnityEvents in List
Hi, I need to display unity events in the inspector but I don't know how.
Here is my code
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEngine.Events;
class TextWindow : EditorWindow
{
Dialog_Object window_dialog_object;
Vector2 scrollposition = Vector2.zero;
public void EditText(Dialog_Object _object)
{
window_dialog_object = _object;
}
private void OnGUI()
{
if(window_dialog_object != null)
{
scrollposition = GUILayout.BeginScrollView(scrollposition, false, true, GUILayout.Width(900),GUILayout.Height(600));
for (int i = 0; i < window_dialog_object.dialogs.Count; i++)
{
GUILayout.BeginVertical("HelpBox");
GUILayout.Label("Text " + (i + 1) + ": ");
window_dialog_object.dialogs[i].Text = GUILayout.TextField(window_dialog_object.dialogs[i].Text);
GUILayout.EndVertical();
}
GUILayout.EndScrollView();
}
}
}
[CustomEditor(typeof(Dialog_Object))]
public class DialogEditor : Editor
{
TextWindow[] window;
Dialog_Object _object;
public override void OnInspectorGUI()
{
serializedObject.Update();
_object = target as Dialog_Object;
SerializedProperty property = serializedObject.FindProperty("dialogs");
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField("Lenght: ");
property.arraySize = EditorGUILayout.IntField(property.arraySize);
EditorGUILayout.EndHorizontal();
for (int i = 0; i < _object.dialogs.Count; i++)
{
EditorGUILayout.BeginVertical("HelpBox");
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField("Name of Character: ");
_object.dialogs[i].Name = EditorGUILayout.TextField(_object.dialogs[i].Name);
EditorGUILayout.EndHorizontal();
_object.dialogs[i].HaveJob = GUILayout.Toggle(_object.dialogs[i].HaveJob, "Have Job");
if (_object.dialogs[i].HaveJob)
{
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField("Description of profession: ");
_object.dialogs[i].job = EditorGUILayout.TextField(_object.dialogs[i].job);
EditorGUILayout.EndHorizontal();
}
GUILayout.Space(10);
if (GUILayout.Button("Edit Text"))
{
window = new TextWindow[property.arraySize];
window[i] = (TextWindow)EditorWindow.GetWindow(typeof(TextWindow));
window[i].EditText(_object);
window[i].Show();
}
SerializedProperty events = serializedObject.FindProperty("dialogs").FindPropertyRelative("events");
EditorGUILayout.PropertyField(events);
if (GUILayout.Button("X", GUILayout.MaxWidth(20), GUILayout.MaxHeight(20)))
{
_object.dialogs.Remove(_object.dialogs[i]);
}
EditorGUILayout.EndVertical();
}
if (GUILayout.Button("+"))
{
_object.dialogs.Add(null);
}
if(GUI.changed)
{
serializedObject.ApplyModifiedProperties();
}
}
}
Comment