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);
        }