/// <summary>
        /// Проверка изменения маппингов для компонента
        /// </summary>
        /// <param name="component">Компонент</param>
        /// <returns>Результат проверки</returns>
        private static bool CheckMappings(Component component)
        {
            bool isChanged = false;

            var parentTr = component.gameObject.GetComponent <Transform>();

            var type = component.GetType();

            var fields = ReflectionTool.GetAllFields <MappingAttribute>(type);

            for (int i = 0; i < fields.Count; i++)
            {
                var field = fields[i].Key;

                var mapAttr = fields[i].Value;

                Transform valueTr = null;

                string path;

                if (string.IsNullOrEmpty(mapAttr.AbsolutePath) == false)
                {
                    path = mapAttr.AbsolutePath;

                    var searchObj = GameObject.Find(path);

                    if (searchObj != null)
                    {
                        valueTr = searchObj.GetComponent <Transform>();
                    }
                }
                else
                {
                    path = string.IsNullOrEmpty(mapAttr.Path) ? field.Name : mapAttr.Path;

                    if (path.StartsWith("_"))
                    {
                        path = path.Substring(1);
                        path = path[0].ToString().ToUpper() + path.Substring(1);
                    }

                    if (path.ToLower().Trim() == ".")
                    {
                        valueTr = parentTr;
                    }
                    else
                    {
                        valueTr = parentTr.Find(path);
                    }
                }

                if (valueTr == null)
                {
                    if (mapAttr.CanEmpty == false)
                    {
                        Debug.LogError("Field " + field.Name + " on path " + path + " not exists in " + type.Name + " for component " + component.name + " in " + component.gameObject.name);
                    }
                }
                else
                {
                    if (field.FieldType.IsArray)
                    {
                        var elementType = field.FieldType.GetElementType();

                        var existComponents = valueTr.GetComponentsInChildren(elementType, true);

                        List <Component> values = new List <Component>();

                        for (int j = 0; j < existComponents.Length; j++)
                        {
                            var comp = existComponents[j];

                            if (comp.transform != valueTr &&
                                comp.CompareTag("IgnoreComponent") == false)
                            {
                                values.Add(comp);
                            }
                        }

                        if (values == null)
                        {
                            if (mapAttr.CanEmpty == false)
                            {
                                Debug.LogError("Component " + field.FieldType.Name + " in field " + field.Name + " on path " + path + " not exists in " + type.Name + " for component " + component.name + " in " + component.gameObject.name);
                            }
                        }
                        else
                        {
                            var arr = Array.CreateInstance(elementType, values.Count);
                            Array.Copy(values.ToArray(), arr, values.Count);

                            field.SetValue(component, arr);

                            isChanged = true;
                        }
                    }
                    else
                    {
                        var value = valueTr.GetComponent(field.FieldType);

                        if (value == null)
                        {
                            if (mapAttr.CanEmpty == false)
                            {
                                Debug.LogError("Component " + field.FieldType.Name + " in field " + field.Name + " on path " + path + " not exists in " + type.Name + " for component " + component.name + " in " + component.gameObject.name);
                            }
                        }
                        else
                        {
                            var currentValue = (Component)field.GetValue(component);

                            if (currentValue != value)
                            {
                                field.SetValue(component, value);

                                isChanged = true;
                            }
                        }
                    }
                }
            }

            return(isChanged);
        }