- Home /
How do you emulate array/List Inspector behavior with an Editor window?
It has been asked, but I can't find the answer. As an example, I want to be able to find all the objects that use a material. The end of this script is what needs work; instead of that, I want to be able to use the up/down arrow keys to highlight the renderers.
And if you have a better solution for viewing the materials list, please let me know.
using UnityEngine; using UnityEditor; using System.Collections.Generic;
class MaterialUsersMenu : EditorWindow {
static Material material;
[MenuItem("Assets/List Scene Objects Using Material", true)] static bool Validate () { material = Selection.activeObject as Material; return material; }
// 1011 is the earliest priority that results in a new menu section in all standard menus. // This is undocumented, and may need to be changed in the future to assure proper placement in the menu. [MenuItem ("Assets/List Scene Objects Using Material", false, 1011)] static void OpenWindow () { GetWindow<MaterialUsersMenu>(true, "Game Objects using " + material.name, true); }
static Vector2 scrollPosition;
void OnGUI () { List<Renderer> renderers = new List<Renderer>(); foreach (Renderer renderer in Resources.FindObjectsOfTypeAll(typeof(Renderer)) ) if (renderer.sharedMaterial == material) renderers.Add(renderer);
// This is the best I have so far.
scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);
foreach (Renderer renderer in renderers) EditorGUILayout.ObjectField(renderer, typeof(Renderer));
EditorGUILayout.EndScrollView();
}
}
Your answer
Follow this Question
Related Questions
Is it possible to drag/drop/increment into editor array? 1 Answer
Gradient Changes in Editor Reset In Play Mode. Why? 1 Answer
How to get a List of Color Arrays? 2 Answers
DeletArrayElementAtIndex crashes Unity when operating a bool array 1 Answer
Editor scripting: Object reference not set to an instance of an object 0 Answers