void OnGUI()
        {
            if (activeMember != null && Event.current.keyCode == KeyCode.Return)
              {
            object @object = activeMember.GetValue();

            if (@object is string || @object is bool)
            {
              activeMember.SetValue(activeMemberNewValue);
            }
            else if (@object is int)
            {
              int i;
              if (activeMemberNewValue != null
            && int.TryParse(activeMemberNewValue.ToString(), out i))
              {
            activeMember.SetValue(i);
              }
            }
            else if (@object is Vector3)
            {
              var vector3 = (Vector3)activeMember.GetValue();
              float v;
              if (activeMemberNewValue != null
            && float.TryParse(activeMemberNewValue.ToString(), out v))
              {
            switch (activeMemberFieldType)
            {
              case FieldType.VectorX: vector3.x = v; break;
              case FieldType.VectorY: vector3.y = v; break;
              case FieldType.VectorZ: vector3.z = v; break;
            }
              }
              activeMember.SetValue(vector3);
            }
            else if (@object is Color)
            {
              var color = (Color)activeMember.GetValue();
              float v;
              if (activeMemberNewValue != null
            && float.TryParse(activeMemberNewValue.ToString(), out v))
              {
            switch (activeMemberFieldType)
            {
              case FieldType.ColorR: color.r = v; break;
              case FieldType.ColorG: color.g = v; break;
              case FieldType.ColorB: color.b = v; break;
              case FieldType.ColorA: color.a = v; break;
            }
              }
              activeMember.SetValue(color);
            }
            else if (@object is Quaternion)
            {
              var quat = (Quaternion)activeMember.GetValue();
              float v;
              if (activeMemberNewValue != null
            && float.TryParse(activeMemberNewValue.ToString(), out v))
              {
            switch (activeMemberFieldType)
            {
              case FieldType.ColorR: quat.x = v; break;
              case FieldType.ColorG: quat.y = v; break;
              case FieldType.ColorB: quat.z = v; break;
              case FieldType.ColorA: quat.w = v; break;
            }
              }
              activeMember.SetValue(quat);
            }
            else if (@object is float)
            {
              float f;
              if (activeMemberNewValue != null
            && float.TryParse(activeMemberNewValue.ToString(), out f))
              {
            activeMember.SetValue(f);
              }
            }

            // Reset variables
            activeMember = null;
            activeMemberFieldType = FieldType.Normal;
            activeMemberNewValue = null;
              }

              if (layerTextInputActive && Event.current.keyCode == KeyCode.Return)
              {
            int i;
            if (int.TryParse(layerTextInputNewValue, out i))
            {
              SelectedGameObject.layer = i;
              layerTextInputActive = false;
            }
              }
        }
        private void DoInputField(MemberValue member, object value, FieldType type,
      float width = 0)
        {
            GUILayoutOption widthOption = width > 0 ? GUILayout.Width(width)
                                              : GUILayout.ExpandWidth(true);

              // If this one is selected
              if (activeMember == member && activeMemberFieldType == type)
              {
            GUI.SetNextControlName(FIELD_EDIT_INPUT_NAME + member.ID);
            activeMemberNewValue = GUILayout.TextField((string)activeMemberNewValue,
              Elements.InputFields.ComponentField, widthOption);
              }
              else
              {
            string oldValue = value.ToString();

            GUI.SetNextControlName(FIELD_EDIT_INPUT_NAME + member.ID);
            string newValue = GUILayout.TextField(oldValue.ToString(),
              Elements.InputFields.ComponentField, widthOption);

            // Input was changed
            if (oldValue != newValue)
            {
              // Set current member to the active one
              activeMember = member;
              activeMemberFieldType = type;
              activeMemberNewValue = newValue;
            }
              }
        }