- Home /
How can i get SerializedProperty from UnityEvent which in List. Sorry for my Eng.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEditor;
using UnityEditor.SceneManagement;
public class CustomEventsList : MonoBehaviour
{
public List<CustomEvent> events;
public CustomEventsList()
{
events = new List<CustomEvent>();
}
public void RemoveEvent(string name)
{
foreach (var item in events)
{
if (item._name == name)
{
events.Remove(item);
break;
}
}
}
public void AddEvent(string name)
{
events.Add(new CustomEvent(name));
}
public int IndexOfEvent(CustomEvent _event)
{
int index = -1;
foreach (var item in events)
{
if (item == _event)
{
index = events.IndexOf(item);
}
}
return index;
}
public bool ContainsEvent(string name)
{
foreach (var item in events)
{
if (item._name == name)
{
return true;
}
}
return false;
}
}
[System.Serializable]
public class CustomEvent
{
[SerializeField]
public string _name;
[SerializeField]
public UnityEvent _event;
public CustomEvent(string _name)
{
this._name = _name;
this._event = new UnityEvent();
}
}
[CustomEditor(typeof(CustomEventsList))]
public class CustomEventsListInspector : Editor
{
private CustomEventsList CEL;
private string eventKey;
private void Awake()
{
eventKey = "Событие";
}
private void OnEnable()
{
CEL = (CustomEventsList)target;
}
public override void OnInspectorGUI()
{
EditorGUILayout.BeginVertical("box");
if (GUILayout.Button("Добавить событие", GUILayout.Height(30)))
{
if (!CEL.ContainsEvent(eventKey))
{
CEL.AddEvent(eventKey);
}
}
eventKey = EditorGUILayout.TextField("Имя события", eventKey);
EditorGUILayout.EndVertical();
if (CEL.events.Count > 0)
{
foreach (var item in CEL.events)
{
SerializedProperty prop = ????????????;
EditorGUILayout.BeginVertical("box");
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField(item._name);
if (GUILayout.Button("Удалить"))
{
CEL.RemoveEvent(item._name);
break;
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.PropertyField(prop);
EditorGUILayout.EndVertical();
}
}
if (GUI.changed)
{
EditorUtility.SetDirty(CEL);
EditorSceneManager.MarkSceneDirty(CEL.gameObject.scene);
}
}
}
Answer by evgen4ik007 · Dec 13, 2020 at 02:17 AM
Found solution by myself
SerializedProperty prop = serializedObject.FindProperty("events").GetArrayElementAtIndex(i).FindPropertyRelative("_event")
Answer by Firestream1014 · Dec 13, 2020 at 12:00 AM
I'm sorry that I don't have the answer but hopefully this will help? https://answers.unity.com/questions/1270631/get-unityevent-reference-from-serializedproperty.html
unlucky no, i can't see his other script and code above private void OnEnable() { m$$anonymous$$yEventProp = serializedObject.FindProperty("m$$anonymous$$yEvent "); }
Your answer
Follow this Question
Related Questions
How to Hide/Show List or Array in the inspector based on a variable? 0 Answers
Responsive Editor UI Button with custom style | How to remove GUIStyle.hover delay 0 Answers
Custom editor super slow even with no draw operations 1 Answer
OnInspectorGUI changes reset when played in editor or building 2 Answers
How can I recreate the Array Inspector element for a custom Inspector GUI? 7 Answers