public override void PropertyDrawer(FieldInfo field, DIVisualComponent comp)
        {
            base.PropertyDrawer(field, comp);
            GetString _string = field.GetValue(comp) as GetString;

            DrawGetString(_string);
        }
        //When edit this method, please edit DrawGetString method at BuildString.cs
        public static void DrawGetString(GetString _string)
        {
            if (_string.getFrom != GetFrom.Exact)
            {
                if (_string.targetObj == null)
                {
                    return;
                }
                var fieldInfos = _string.targetObj.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance).ToList();
                for (int i = 0; i < fieldInfos.Count; i++)
                {
                    if (fieldInfos[i].FieldType == typeof(string) || fieldInfos[i].FieldType == typeof(DIVariableString) ||
                        (typeof(IList).IsAssignableFrom(fieldInfos[i].FieldType) &&
                         (fieldInfos[i].FieldType == typeof(string[]) || fieldInfos[i].FieldType == typeof(DIVariableString[]) ||
                          (fieldInfos[i].FieldType == typeof(List <string>) || fieldInfos[i].FieldType == typeof(List <DIVariableString>))
                         )))
                    {
                        //DO NOTHING
                    }
                    else
                    {
                        fieldInfos.RemoveAt(i);
                        i -= 1;
                    }
                }

                var fieldInfoName = fieldInfos.Select(i => i.Name).ToList();
                if (fieldInfoName.Count == 0)
                {
                    fieldInfoName.Add("");
                }
                int fieldIdx = fieldInfoName.IndexOf(_string.fieldName);
                if (fieldIdx < 0)
                {
                    fieldIdx = 0;
                }
                fieldIdx          = EditorGUILayout.Popup("Field", fieldIdx, fieldInfoName.ToArray());
                _string.fieldName = fieldInfoName[fieldIdx];

                if (fieldInfos.Count == 0)
                {
                    return;
                }

                if (typeof(IList).IsAssignableFrom(fieldInfos[fieldIdx].FieldType))
                {
                    if (_string.indexArray > ((IList)fieldInfos[fieldIdx].GetValue(_string.targetObj)).Count)
                    {
                        _string.indexArray = ((IList)fieldInfos[fieldIdx].GetValue(_string.targetObj)).Count - 1;
                    }
                    List <string> fieldArrayNames = new List <string>();
                    var           fieldArray      = ((IList)fieldInfos[fieldIdx].GetValue(_string.targetObj));

                    //If regular, just show index
                    if (fieldInfos[fieldIdx].FieldType == typeof(string[]) || (fieldInfos[fieldIdx].FieldType == typeof(List <string>)))
                    {
                        for (int i = 0; i < fieldArray.Count; i++)
                        {
                            fieldArrayNames.Add("Index - " + i.ToString());
                        }
                        if (fieldArrayNames.Count == 0)
                        {
                            fieldArrayNames.Add("");
                        }
                        _string.indexArray = EditorGUILayout.Popup("Index", _string.indexArray, fieldArrayNames.ToArray());
                    }
                    //if DIVar show varname
                    else if (fieldInfos[fieldIdx].FieldType == typeof(DIVariableString[]) || fieldInfos[fieldIdx].FieldType == typeof(List <DIVariableString>))
                    {
                        for (int i = 0; i < fieldArray.Count; i++)
                        {
                            fieldArrayNames.Add(((DIVariableString)fieldArray[i]).varName);
                        }
                        if (fieldArrayNames.Count == 0)
                        {
                            fieldArrayNames.Add("");
                        }
                        _string.indexArray = EditorGUILayout.Popup("Index", _string.indexArray, fieldArrayNames.ToArray());
                    }
                }
                else
                {
                    _string.indexArray = -1;
                }
            }
            //Exact value
            else
            {
                _string.exactValue = EditorGUILayout.TextField("Value", _string.exactValue);
            }
        }