在CustomEditor脚本中,我为附着有特定组件(在本例中为Mesh Renderer)的黄色对象着色。
System.Type type = SceneModeUtility.SearchBar(typeof(BoxCollider), typeof(MeshRenderer));
SceneModeUtility.SearchForType(type);
在EditorWindow脚本中,我正在使用SetSearchFilter:
private void OnGUI()
{
CustomHierarchy.gameObjectFontColor = EditorGUILayout.ColorField("Original Font Color", CustomHierarchy.gameObjectFontColor);
CustomHierarchy.prefabOrgFontColor = EditorGUILayout.ColorField("Prefab Original Font Color", CustomHierarchy.prefabOrgFontColor);
CustomHierarchy.prefabModFontColor = EditorGUILayout.ColorField("Prefab Modified Font Color", CustomHierarchy.prefabModFontColor);
CustomHierarchy.inActiveColor = EditorGUILayout.ColorField("Inactive Color", CustomHierarchy.inActiveColor);
CustomHierarchy.meshRendererColor = EditorGUILayout.ColorField("Mesh Renderer Color", CustomHierarchy.meshRendererColor);
multipleComponents = GUI.Toggle(new Rect(30, 160, 120, 30), multipleComponents, "Multiple components");
if(multipleComponents == true)
{
GUI.enabled = true;
}
else
{
GUI.enabled = false;
}
multipleComponentsString = GUI.TextField(new Rect(30, 180, 120, 30), multipleComponentsString, 25);
GUI.enabled = true;
filterText = GUI.TextField(new Rect(30, 230, 120, 30), filterText, 25);
System.Type type = SceneModeUtility.SearchBar(typeof(BoxCollider), typeof(MeshRenderer));
SceneModeUtility.SearchForType(type);
}
在这里,我输入filterText TextField,在这种情况下,它是按名称过滤的。
但是我想按名称过滤,但也只过滤连接到它们的对象的Mesh Renderer组件。不是FILTERMODE_TYPE,而是已附加了Mesh Renderer组件的对象。因此,过滤器模式应为Name(1),而且还应同时使用网格渲染器过滤对象。
我试图在OnGUI中添加两行: 两行是:
.wrapper {
display: grid;
grid-template-columns: 1fr 1fr; // creates two responsive columns
grid-gap: 10px; // puts 10px between each node in the grid
}
但是随后在EditorWindow中,我看到了3个图标,均为BoxCollider MeshRenderer。 如果单击BoxCollider,它将使用boxcollider过滤所有对象,但是当我在层次结构搜索栏中键入名称时,它将过滤具有名称和box collider的所有对象,但是当我再次单击editorwindow时,它将其更改为所有图标。网格渲染器也是如此。
我不能同时选择boxcollider和meshrenderer,我只能选择其中之一。
EditorWindow的屏幕截图:
def "GetNumberOfMaxHeightCandles"() {
given: "A BirthdayCandles object"
def candles = new BirthdayCandles(testInput)
when: "I call the max number height method"
def actual = candles.getNumberOfMaxHeightCandles()
then: "I should get the frequency count of the max number in the integer array"
actual == expectedResult
where:
testInput | expectedResult
[1,1,1,3,3,3,3] as int [] | 4
[1,1,1,3,3,3,4] as int [] | 1
}
答案 0 :(得分:0)
我注意到您正在使用反射来执行此操作。不用了有一个名为SceneModeUtility
的未公开说明的API,可用于在编辑器中搜索对象。请参见此的非官方API。使用Chrome浏览器可以轻松将其翻译成英文。
如果您只想在编辑器的SearchField中搜索和过滤带有组件(MeshRenderer
)的对象,则:
SceneModeUtility.SearchForType(typeof(MeshRenderer));
要使用GameObject上的多个组件过滤搜索并返回结果:
System.Type type = SceneModeUtility.SearchBar(typeof(MeshRenderer), typeof(Rigidbody));
您可以根据需要将任意数量的组件传递给SearchBar
函数。