- Home /
Question by
Nemox · Feb 15, 2015 at 07:15 PM ·
editorinspectoreditorwindowwindowserializedobject
Draw inspector for SerializedObject within EditorWindow?
Hey, so I've got a SerializedObject in my EditorWindow script, and I need to draw the object's custom editor within a panel I have set aside for it in my custom window.
How do I do this?
Comment
Answer by tinyant · Jul 05, 2017 at 09:04 AM
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Reflection;
using System;
using UnityEditor;
public class SerilizationWindow : EditorWindow
{
public static void ShowSerilizationWindow(SerializedObject target)
{
if (target == null)
{
Debug.Log("<color=red>ShowSerilizationWindow target is null</color>");
return;
}
SerilizationWindow window = GetWindow(typeof(SerilizationWindow)) as SerilizationWindow;
window.minSize = new Vector2(600, 500);
window.position = new Rect(Screen.width / 2f, Screen.height / 2f, 200, 300);
window._targetObject = target;
window.Show();
}
public SerializedObject _targetObject { get; set; }
private Vector2 _scrollPos = Vector2.zero;
private void OnGUI()
{
if (_targetObject == null)
{
EditorGUILayout.HelpBox("Target SerializedObject is null!", MessageType.Warning);
}
else
{
// display serializedProperty with selected mode
Type type = typeof(SerializedObject);
PropertyInfo infor = type.GetProperty("inspectorMode", BindingFlags.NonPublic | BindingFlags.Instance);
if (infor != null)
{
infor.SetValue(_targetObject, InspectorMode.Normal, null);
}
// _targetObject.inspectorMode = this.m_InspectorMode;
_scrollPos = EditorGUILayout.BeginScrollView(_scrollPos);
SerializedProperty iterator = _targetObject.GetIterator();
bool enterChildren = true;
while (iterator.NextVisible(enterChildren))
{
enterChildren = false;
EditorGUILayout.PropertyField(iterator, true, new GUILayoutOption[0]);
}
EditorGUILayout.EndScrollView();
}
}
}
UnityEngine.Object selObj = Selection.activeObject;
//Transform trs = (selObj as GameObject).GetComponent<Transform>();
//obj = new SerializedObject(trs);
Animator animator = (selObj as GameObject).GetComponent<Animator>();
obj = new SerializedObject(animator);
SerilizationWindow.ShowSerilizationWindow(obj);
Firstly you should get target SerializedObject to draw the inspector. and GetIterator() get all SerializedProperty of SerializedObject.
Your answer
Follow this Question
Related Questions
PropertyDrawer and EditorWindow 1 Answer
Get game view window current width & height in script 1 Answer
Set the Rect of PopupWindowContent 1 Answer
Custom Inspector for ScriptableObject 1 Answer
Multiple editor windows combined 0 Answers