- Home /
 
Custom Editor Vector3Field not working
Hello!
This is the first time I am trying to build a custom inspector and honestly I am overwhelmed by the many classes and definitions. EditorGUI, EditorGUILayout, EditorWindow... I followed a few different tutorials, e.g. this one but I can't get it to work.
I am trying to display two Vector3 fields from a certain class as Vector3Fields like in the default transform inspector. So not exactly complicated (I thought...).
Here is my class:
 using UnityEngine;
 using System.Collections;
 
     [System.Serializable]
     public class VectorAndMod : MonoBehaviour {
         
         public Vector3 vector;
         public Vector3 mod;
     
     
     }
 
 
               And here is my Editor class:
 using UnityEngine;
 using UnityEditor;
 using System.Collections;
 
 [CustomEditor(typeof(VectorAndMod))]
 class VectorAndModEditor : Editor {
     
     public override void OnInspectorGUI () {
         
         VectorAndMod vectorAndMod = (VectorAndMod) target;
         vectorAndMod.vector = EditorGUILayout.Vector3Field ("Vector", vectorAndMod.vector);
         vectorAndMod.mod = EditorGUILayout.Vector3Field ("Mod", vectorAndMod.mod);
         
         if (GUI.changed)
             EditorUtility.SetDirty (vectorAndMod);
         
     }
     
         
 }
 
 
               What am I missing? Thanks in advance!!!
Answer by Jessespike · Dec 16, 2014 at 06:23 PM
Look at PropertyDrawers http://docs.unity3d.com/Manual/editor-PropertyDrawers.html
Ok, thanks so far! I tried it with PropertyDrawers and am making progress.
However now I get the error:
 $$anonymous$$ismatched types in SetValue
 UnityEditor.SerializedProperty:set_vector3Value(Vector3)
 VectorAnd$$anonymous$$odDrawer:OnGUI(Rect, SerializedProperty, GUIContent) (at Assets/Editor/VectorAnd$$anonymous$$odDrawer.cs:26)
 UnityEditor.DockArea:OnGUI()
 
                  Also my layout looks really messed up:
This is my code for the PropertyDrawer class code:
 using UnityEngine;
 using UnityEditor;
 using System.Collections;
 
 [CustomPropertyDrawer(typeof(VectorAnd$$anonymous$$od))]
 public class VectorAnd$$anonymous$$odDrawer : PropertyDrawer {
     
     // Draw the property inside the given rect
     public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
     {
         // Using BeginProperty / EndProperty on the parent property means that
         // prefab override logic works on the entire property.
         EditorGUI.BeginProperty(position, label, property);
 
         // Draw label
         position = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label);
 
         // Don't make child fields be indented
         int indent = EditorGUI.indentLevel;
         EditorGUI.indentLevel = 0;
 
         // Calculate rects
         Rect vectorRect = new Rect(position.x, position.y, position.width, position.height);
         Rect modRect = new Rect(position.x, position.y, position.height, position.height);
         
         property.vector3Value = EditorGUI.Vector3Field(vectorRect, "Vector", property.FindPropertyRelative("vector").vector3Value);
         
         
         
         // Set indent back to what it was
         EditorGUI.indentLevel = indent;
 
         EditorGUI.EndProperty();
     }
     
 }
                 Your answer