Skip to content

Commit 4996b11

Browse files
committed
Add new sample showing a CustomIndexer that can validate prefab with AudioListener.
1 parent 971cb31 commit 4996b11

21 files changed

Lines changed: 1295 additions & 6 deletions

projects/Samples/Assets/Editor/CustomIndexers.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using UnityEditor;
2+
using UnityEditor.Search;
3+
using UnityEngine;
4+
5+
public class PrefabValidator
6+
{
7+
// More info on this Attribute: https://docs.unity3d.com/ScriptReference/Search.CustomObjectIndexerAttribute.html
8+
// Article about Custom Asset Indexing: https://github.com/Unity-Technologies/com.unity.search.extensions/wiki/Custom-Asset-Indexing
9+
[CustomObjectIndexer(typeof(GameObject), version = 1)]
10+
internal static void PrefabWithAudioListener(CustomObjectIndexerTarget context, ObjectIndexer indexer)
11+
{
12+
/*
13+
This customindexer will tag all prefab who contains an AudioListener or a Children with an AudioListener.
14+
15+
running the query: `p: validate:PrefabWithAudioListener` will yields all of these prefabs.
16+
17+
*/
18+
var go = context.target as GameObject;
19+
if (go == null)
20+
return;
21+
22+
if (string.IsNullOrEmpty(AssetDatabase.GetAssetPath(go)))
23+
return;
24+
25+
var hasAudioListener = go.GetComponentInChildren<AudioListener>();
26+
if (hasAudioListener == null)
27+
return;
28+
29+
// NOTE: Always use IndexWord or IndexProperty instead of AddWord, AddProperty since it correctly handles case sensitivity.
30+
// Note: Sometimes changing code in a CustomObjectIndexer won't reindexed the relevant objects. You might have to completely reindex your project
31+
// or to reimport the prefabs.
32+
indexer.IndexProperty(context.documentIndex, "validate", "PrefabWithAudioListener", true);
33+
}
34+
}

projects/Samples/Assets/Editor/CustomIndexers/PrefabValidator.cs.meta

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
%YAML 1.1
2+
%TAG !u! tag:unity3d.com,2011:
3+
--- !u!1 &3351957463534987994
4+
GameObject:
5+
m_ObjectHideFlags: 0
6+
m_CorrespondingSourceObject: {fileID: 0}
7+
m_PrefabInstance: {fileID: 0}
8+
m_PrefabAsset: {fileID: 0}
9+
serializedVersion: 6
10+
m_Component:
11+
- component: {fileID: 45501015093784944}
12+
- component: {fileID: 3154663977168064436}
13+
m_Layer: 0
14+
m_Name: Child
15+
m_TagString: Untagged
16+
m_Icon: {fileID: 0}
17+
m_NavMeshLayer: 0
18+
m_StaticEditorFlags: 0
19+
m_IsActive: 1
20+
--- !u!4 &45501015093784944
21+
Transform:
22+
m_ObjectHideFlags: 0
23+
m_CorrespondingSourceObject: {fileID: 0}
24+
m_PrefabInstance: {fileID: 0}
25+
m_PrefabAsset: {fileID: 0}
26+
m_GameObject: {fileID: 3351957463534987994}
27+
serializedVersion: 2
28+
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
29+
m_LocalPosition: {x: 0, y: 0, z: 0}
30+
m_LocalScale: {x: 1, y: 1, z: 1}
31+
m_ConstrainProportionsScale: 0
32+
m_Children: []
33+
m_Father: {fileID: 8433816181739805973}
34+
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
35+
--- !u!81 &3154663977168064436
36+
AudioListener:
37+
m_ObjectHideFlags: 0
38+
m_CorrespondingSourceObject: {fileID: 0}
39+
m_PrefabInstance: {fileID: 0}
40+
m_PrefabAsset: {fileID: 0}
41+
m_GameObject: {fileID: 3351957463534987994}
42+
m_Enabled: 1
43+
--- !u!1 &4880745574186546744
44+
GameObject:
45+
m_ObjectHideFlags: 0
46+
m_CorrespondingSourceObject: {fileID: 0}
47+
m_PrefabInstance: {fileID: 0}
48+
m_PrefabAsset: {fileID: 0}
49+
serializedVersion: 6
50+
m_Component:
51+
- component: {fileID: 8433816181739805973}
52+
- component: {fileID: 1228438802357599674}
53+
- component: {fileID: 2883764179032617565}
54+
- component: {fileID: 6639182718030488}
55+
m_Layer: 0
56+
m_Name: ChildrenWithAudioListener
57+
m_TagString: Untagged
58+
m_Icon: {fileID: 0}
59+
m_NavMeshLayer: 0
60+
m_StaticEditorFlags: 0
61+
m_IsActive: 1
62+
--- !u!4 &8433816181739805973
63+
Transform:
64+
m_ObjectHideFlags: 0
65+
m_CorrespondingSourceObject: {fileID: 0}
66+
m_PrefabInstance: {fileID: 0}
67+
m_PrefabAsset: {fileID: 0}
68+
m_GameObject: {fileID: 4880745574186546744}
69+
serializedVersion: 2
70+
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
71+
m_LocalPosition: {x: 5.19, y: 0, z: 0}
72+
m_LocalScale: {x: 1, y: 1, z: 1}
73+
m_ConstrainProportionsScale: 0
74+
m_Children:
75+
- {fileID: 45501015093784944}
76+
m_Father: {fileID: 0}
77+
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
78+
--- !u!33 &1228438802357599674
79+
MeshFilter:
80+
m_ObjectHideFlags: 0
81+
m_CorrespondingSourceObject: {fileID: 0}
82+
m_PrefabInstance: {fileID: 0}
83+
m_PrefabAsset: {fileID: 0}
84+
m_GameObject: {fileID: 4880745574186546744}
85+
m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}
86+
--- !u!23 &2883764179032617565
87+
MeshRenderer:
88+
m_ObjectHideFlags: 0
89+
m_CorrespondingSourceObject: {fileID: 0}
90+
m_PrefabInstance: {fileID: 0}
91+
m_PrefabAsset: {fileID: 0}
92+
m_GameObject: {fileID: 4880745574186546744}
93+
m_Enabled: 1
94+
m_CastShadows: 1
95+
m_ReceiveShadows: 1
96+
m_DynamicOccludee: 1
97+
m_StaticShadowCaster: 0
98+
m_MotionVectors: 1
99+
m_LightProbeUsage: 1
100+
m_ReflectionProbeUsage: 1
101+
m_RayTracingMode: 2
102+
m_RayTraceProcedural: 0
103+
m_RayTracingAccelStructBuildFlagsOverride: 0
104+
m_RayTracingAccelStructBuildFlags: 1
105+
m_SmallMeshCulling: 1
106+
m_RenderingLayerMask: 1
107+
m_RendererPriority: 0
108+
m_Materials:
109+
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
110+
m_StaticBatchInfo:
111+
firstSubMesh: 0
112+
subMeshCount: 0
113+
m_StaticBatchRoot: {fileID: 0}
114+
m_ProbeAnchor: {fileID: 0}
115+
m_LightProbeVolumeOverride: {fileID: 0}
116+
m_ScaleInLightmap: 1
117+
m_ReceiveGI: 1
118+
m_PreserveUVs: 0
119+
m_IgnoreNormalsForChartDetection: 0
120+
m_ImportantGI: 0
121+
m_StitchLightmapSeams: 1
122+
m_SelectedEditorRenderState: 3
123+
m_MinimumChartSize: 4
124+
m_AutoUVMaxDistance: 0.5
125+
m_AutoUVMaxAngle: 89
126+
m_LightmapParameters: {fileID: 0}
127+
m_SortingLayerID: 0
128+
m_SortingLayer: 0
129+
m_SortingOrder: 0
130+
m_AdditionalVertexStreams: {fileID: 0}
131+
--- !u!136 &6639182718030488
132+
CapsuleCollider:
133+
m_ObjectHideFlags: 0
134+
m_CorrespondingSourceObject: {fileID: 0}
135+
m_PrefabInstance: {fileID: 0}
136+
m_PrefabAsset: {fileID: 0}
137+
m_GameObject: {fileID: 4880745574186546744}
138+
m_Material: {fileID: 0}
139+
m_IncludeLayers:
140+
serializedVersion: 2
141+
m_Bits: 0
142+
m_ExcludeLayers:
143+
serializedVersion: 2
144+
m_Bits: 0
145+
m_LayerOverridePriority: 0
146+
m_IsTrigger: 0
147+
m_ProvidesContacts: 0
148+
m_Enabled: 1
149+
serializedVersion: 2
150+
m_Radius: 0.5
151+
m_Height: 2
152+
m_Direction: 1
153+
m_Center: {x: 0, y: 0, z: 0}

projects/Samples/Assets/Prefabs/ChildrenWithAudioListener.prefab.meta

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
1+
%YAML 1.1
2+
%TAG !u! tag:unity3d.com,2011:
3+
--- !u!1 &917910615176396541
4+
GameObject:
5+
m_ObjectHideFlags: 0
6+
m_CorrespondingSourceObject: {fileID: 0}
7+
m_PrefabInstance: {fileID: 0}
8+
m_PrefabAsset: {fileID: 0}
9+
serializedVersion: 6
10+
m_Component:
11+
- component: {fileID: 3725079542165112194}
12+
- component: {fileID: 1340957945128882013}
13+
m_Layer: 0
14+
m_Name: GrandChild
15+
m_TagString: Untagged
16+
m_Icon: {fileID: 0}
17+
m_NavMeshLayer: 0
18+
m_StaticEditorFlags: 0
19+
m_IsActive: 1
20+
--- !u!4 &3725079542165112194
21+
Transform:
22+
m_ObjectHideFlags: 0
23+
m_CorrespondingSourceObject: {fileID: 0}
24+
m_PrefabInstance: {fileID: 0}
25+
m_PrefabAsset: {fileID: 0}
26+
m_GameObject: {fileID: 917910615176396541}
27+
serializedVersion: 2
28+
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
29+
m_LocalPosition: {x: 0, y: 0, z: 0}
30+
m_LocalScale: {x: 1, y: 1, z: 1}
31+
m_ConstrainProportionsScale: 0
32+
m_Children: []
33+
m_Father: {fileID: 6253115238095250284}
34+
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
35+
--- !u!81 &1340957945128882013
36+
AudioListener:
37+
m_ObjectHideFlags: 0
38+
m_CorrespondingSourceObject: {fileID: 0}
39+
m_PrefabInstance: {fileID: 0}
40+
m_PrefabAsset: {fileID: 0}
41+
m_GameObject: {fileID: 917910615176396541}
42+
m_Enabled: 1
43+
--- !u!1 &4584984027790836686
44+
GameObject:
45+
m_ObjectHideFlags: 0
46+
m_CorrespondingSourceObject: {fileID: 0}
47+
m_PrefabInstance: {fileID: 0}
48+
m_PrefabAsset: {fileID: 0}
49+
serializedVersion: 6
50+
m_Component:
51+
- component: {fileID: 6253115238095250284}
52+
m_Layer: 0
53+
m_Name: Child
54+
m_TagString: Untagged
55+
m_Icon: {fileID: 0}
56+
m_NavMeshLayer: 0
57+
m_StaticEditorFlags: 0
58+
m_IsActive: 1
59+
--- !u!4 &6253115238095250284
60+
Transform:
61+
m_ObjectHideFlags: 0
62+
m_CorrespondingSourceObject: {fileID: 0}
63+
m_PrefabInstance: {fileID: 0}
64+
m_PrefabAsset: {fileID: 0}
65+
m_GameObject: {fileID: 4584984027790836686}
66+
serializedVersion: 2
67+
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
68+
m_LocalPosition: {x: 0, y: 0, z: 0}
69+
m_LocalScale: {x: 1, y: 1, z: 1}
70+
m_ConstrainProportionsScale: 0
71+
m_Children:
72+
- {fileID: 3725079542165112194}
73+
m_Father: {fileID: 1290117683403810977}
74+
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
75+
--- !u!1 &5114509758314036099
76+
GameObject:
77+
m_ObjectHideFlags: 0
78+
m_CorrespondingSourceObject: {fileID: 0}
79+
m_PrefabInstance: {fileID: 0}
80+
m_PrefabAsset: {fileID: 0}
81+
serializedVersion: 6
82+
m_Component:
83+
- component: {fileID: 1290117683403810977}
84+
- component: {fileID: 596804784386391011}
85+
- component: {fileID: 4579875609390544169}
86+
- component: {fileID: 4001028616103355107}
87+
m_Layer: 0
88+
m_Name: GrandChildrenWithAudioListener
89+
m_TagString: Untagged
90+
m_Icon: {fileID: 0}
91+
m_NavMeshLayer: 0
92+
m_StaticEditorFlags: 0
93+
m_IsActive: 1
94+
--- !u!4 &1290117683403810977
95+
Transform:
96+
m_ObjectHideFlags: 0
97+
m_CorrespondingSourceObject: {fileID: 0}
98+
m_PrefabInstance: {fileID: 0}
99+
m_PrefabAsset: {fileID: 0}
100+
m_GameObject: {fileID: 5114509758314036099}
101+
serializedVersion: 2
102+
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
103+
m_LocalPosition: {x: 0, y: 0, z: -20.6}
104+
m_LocalScale: {x: 1, y: 1, z: 1}
105+
m_ConstrainProportionsScale: 0
106+
m_Children:
107+
- {fileID: 6253115238095250284}
108+
m_Father: {fileID: 0}
109+
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
110+
--- !u!33 &596804784386391011
111+
MeshFilter:
112+
m_ObjectHideFlags: 0
113+
m_CorrespondingSourceObject: {fileID: 0}
114+
m_PrefabInstance: {fileID: 0}
115+
m_PrefabAsset: {fileID: 0}
116+
m_GameObject: {fileID: 5114509758314036099}
117+
m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
118+
--- !u!23 &4579875609390544169
119+
MeshRenderer:
120+
m_ObjectHideFlags: 0
121+
m_CorrespondingSourceObject: {fileID: 0}
122+
m_PrefabInstance: {fileID: 0}
123+
m_PrefabAsset: {fileID: 0}
124+
m_GameObject: {fileID: 5114509758314036099}
125+
m_Enabled: 1
126+
m_CastShadows: 1
127+
m_ReceiveShadows: 1
128+
m_DynamicOccludee: 1
129+
m_StaticShadowCaster: 0
130+
m_MotionVectors: 1
131+
m_LightProbeUsage: 1
132+
m_ReflectionProbeUsage: 1
133+
m_RayTracingMode: 2
134+
m_RayTraceProcedural: 0
135+
m_RayTracingAccelStructBuildFlagsOverride: 0
136+
m_RayTracingAccelStructBuildFlags: 1
137+
m_SmallMeshCulling: 1
138+
m_RenderingLayerMask: 1
139+
m_RendererPriority: 0
140+
m_Materials:
141+
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
142+
m_StaticBatchInfo:
143+
firstSubMesh: 0
144+
subMeshCount: 0
145+
m_StaticBatchRoot: {fileID: 0}
146+
m_ProbeAnchor: {fileID: 0}
147+
m_LightProbeVolumeOverride: {fileID: 0}
148+
m_ScaleInLightmap: 1
149+
m_ReceiveGI: 1
150+
m_PreserveUVs: 0
151+
m_IgnoreNormalsForChartDetection: 0
152+
m_ImportantGI: 0
153+
m_StitchLightmapSeams: 1
154+
m_SelectedEditorRenderState: 3
155+
m_MinimumChartSize: 4
156+
m_AutoUVMaxDistance: 0.5
157+
m_AutoUVMaxAngle: 89
158+
m_LightmapParameters: {fileID: 0}
159+
m_SortingLayerID: 0
160+
m_SortingLayer: 0
161+
m_SortingOrder: 0
162+
m_AdditionalVertexStreams: {fileID: 0}
163+
--- !u!64 &4001028616103355107
164+
MeshCollider:
165+
m_ObjectHideFlags: 0
166+
m_CorrespondingSourceObject: {fileID: 0}
167+
m_PrefabInstance: {fileID: 0}
168+
m_PrefabAsset: {fileID: 0}
169+
m_GameObject: {fileID: 5114509758314036099}
170+
m_Material: {fileID: 0}
171+
m_IncludeLayers:
172+
serializedVersion: 2
173+
m_Bits: 0
174+
m_ExcludeLayers:
175+
serializedVersion: 2
176+
m_Bits: 0
177+
m_LayerOverridePriority: 0
178+
m_IsTrigger: 0
179+
m_ProvidesContacts: 0
180+
m_Enabled: 1
181+
serializedVersion: 5
182+
m_Convex: 0
183+
m_CookingOptions: 30
184+
m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}

0 commit comments

Comments
 (0)