com.jasonxudeveloper.jengine
Version:
The solution that allows unity games update in runtime.
68 lines (58 loc) • 2.08 kB
Plain Text
private bool _displaying;
private readonly AnimBool[] _fadeGroup = new AnimBool[SerializeILTypeInstance.FadeGroupNum];
private async void OnEnable()
{
_displaying = true;
await SerializeILTypeInstance.OnEnable(_fadeGroup, () =>
{
if (_displaying)
{
Repaint();
}
});
}
private void OnDestroy()
{
SerializeILTypeInstance.OnDestroy(ref _displaying);
}
private void OnDisable()
{
SerializeILTypeInstance.OnDisable(_fadeGroup,Repaint);
}
public override void OnInspectorGUI()
{
serializedObject.Update();
MonoBehaviourAdapter.Adaptor clr = target as MonoBehaviourAdapter.Adaptor;
if (clr is null) return;
var instance = clr.ILInstance;
if (instance != null)
{
EditorGUILayout.LabelField("Script", clr.ILInstance.Type.Name);
int index = 0;
foreach (var i in instance.Type.FieldMapping)
{
//这里是取的所有字段,没有处理不是public的
var type = instance.Type.FieldTypes[index];
var cType = type.TypeForCLR;
var objName = i.Key;
GUI.enabled = true;
index++;
if (SerializeILTypeInstance.NeedToHide(instance, objName)) continue;
foreach (var method in SerializeILTypeInstance.GetSerializeMethods())
{
System.Object[] parameters= {_fadeGroup, cType, type, instance, i, objName};
var result = method.Value.Invoke(null, parameters);
if ((bool) result)
{
break;
}
if (method.Key == 0)
{
EditorGUILayout.LabelField(objName, "(null)");
}
}
}
}
// 应用属性修改
serializedObject.ApplyModifiedProperties();
}