generated from DevPlus1/Unity-Customer-Template
Initial commit
This commit is contained in:
commit
ed87277ef8
64 changed files with 4639 additions and 0 deletions
|
|
@ -0,0 +1,77 @@
|
|||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace RunlevelSystems.DevPlus1.EditorTools
|
||||
{
|
||||
public static class RLUnityEventAnalyzer
|
||||
{
|
||||
public static List<RLUnityEventInfo> ExtractUnityEvents(GameObject gameObject, string sourcePath, string hierarchyPath)
|
||||
{
|
||||
List<RLUnityEventInfo> events = new List<RLUnityEventInfo>();
|
||||
Component[] components = gameObject.GetComponents<Component>();
|
||||
|
||||
foreach (Component component in components)
|
||||
{
|
||||
if (component == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
SerializedObject serializedObject = new SerializedObject(component);
|
||||
SerializedProperty iterator = serializedObject.GetIterator();
|
||||
bool enterChildren = true;
|
||||
|
||||
while (iterator.NextVisible(enterChildren))
|
||||
{
|
||||
enterChildren = false;
|
||||
if (iterator.propertyType == SerializedPropertyType.Generic &&
|
||||
(iterator.type.Contains("UnityEvent") || iterator.displayName.Contains("On Click") || iterator.name.Contains("m_OnClick")))
|
||||
{
|
||||
ExtractPersistentCalls(events, iterator.Copy(), sourcePath, hierarchyPath, component);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return events;
|
||||
}
|
||||
|
||||
private static void ExtractPersistentCalls(List<RLUnityEventInfo> events, SerializedProperty eventProperty, string sourcePath, string hierarchyPath, Component component)
|
||||
{
|
||||
SerializedProperty calls = eventProperty.FindPropertyRelative("m_PersistentCalls.m_Calls");
|
||||
if (calls == null || !calls.isArray)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < calls.arraySize; i++)
|
||||
{
|
||||
SerializedProperty call = calls.GetArrayElementAtIndex(i);
|
||||
Object target = ReadObject(call, "m_Target");
|
||||
string method = ReadString(call, "m_MethodName");
|
||||
|
||||
RLUnityEventInfo info = new RLUnityEventInfo();
|
||||
info.sourcePath = sourcePath;
|
||||
info.gameObjectPath = hierarchyPath;
|
||||
info.componentName = component.GetType().Name;
|
||||
info.eventName = eventProperty.displayName;
|
||||
info.targetObject = target != null ? target.name : "missing or none";
|
||||
info.targetComponent = target != null ? target.GetType().Name : "not detected";
|
||||
info.targetMethod = string.IsNullOrEmpty(method) ? "not detected" : method;
|
||||
events.Add(info);
|
||||
}
|
||||
}
|
||||
|
||||
private static Object ReadObject(SerializedProperty parent, string relativePath)
|
||||
{
|
||||
SerializedProperty property = parent.FindPropertyRelative(relativePath);
|
||||
return property != null ? property.objectReferenceValue : null;
|
||||
}
|
||||
|
||||
private static string ReadString(SerializedProperty parent, string relativePath)
|
||||
{
|
||||
SerializedProperty property = parent.FindPropertyRelative(relativePath);
|
||||
return property != null ? property.stringValue : string.Empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue