public void OnAfterDeserialize() { var declareType = typeof(Interact).Assembly.GetType(methodDeclareClass); if (String.IsNullOrEmpty(helperShowInEditorType)) { Debug.LogError("helperShowInEditorType is not set for assertation method: " + methodDeclareClass + "." + methodName + " You have to create class derived from" + " ShowHelperBase and describe in it method return type and parameters"); return; } if (declareType == null) { Debug.LogError("Cant find declaring type " + methodDeclareClass + " for method " + methodName + " in assembly " + typeof(Interact).Assembly.GetName().Name + " probably class was renamed or deleted"); return; } var helperType = typeof(Interact).Assembly.GetType(helperShowInEditorType); if (helperType == null) { Debug.LogError("Cant find method helper class " + helperShowInEditorType + " for method " + methodName + " in assembly " + typeof(Interact).Assembly.GetName().Name + " probably class was renamed or deleted"); return; } Helper = Activator.CreateInstance(helperType) as ShowHelperBase; var methodsInfo = declareType.GetMethods(BindingFlags.Public | BindingFlags.Static); methodInfo = methodsInfo.FirstOrDefault(method => { if (method.Name == methodName) { var actualParameters = method.GetParameters(); if (actualParameters.Length == methodsParametersTypeNames.Count) { for (int i = 0; i < actualParameters.Length; i++) { if (actualParameters[i].ParameterType.FullName != methodsParametersTypeNames[i]) { return(false); } } return(true); } } return(false); }); if (methodInfo == null) { Debug.LogError("Cant find method " + methodName + " in class " + methodDeclareClass + " probably method was renamed or deleted"); } }
private GameObject FindAvailableInParents(GameObject targetGameobject, ShowHelperBase helper) { var result = false; var targetTransform = targetGameobject.transform; while (!result && targetTransform) { result = helper.IsAvailable(targetTransform.gameObject); if (!result) { targetTransform = targetTransform.parent; } } return(targetTransform ? targetTransform.gameObject : null); }