Unity Editor下,可以在不改变原有布局的情况下扩展Inspect的界面。 在继承了Editor的类中,有两种实现方式: - <p class="MsoNormal"><span lang="EN-US">using UnityEditor;<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US"> <o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">[CustomEditor(typeof(CustomClass))]<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">public class CustomClassEditor : Editor {<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- public override void OnInspectorGUI() {<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- // </span><span style="font-family:宋体;mso-ascii-font-family:Calibri;
- mso-ascii-theme-font:minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:
- minor-fareast;mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin">自定义代码</span><span lang="EN-US"><o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- base.OnInspectorGUI();<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- // </span><span style="font-family:宋体;mso-ascii-font-family:Calibri;
- mso-ascii-theme-font:minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:
- minor-fareast;mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin">自定义代码</span><span lang="EN-US"><o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US"> }<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">}</span></p>
复制代码
和 - <p class="MsoNormal"><span lang="EN-US">using UnityEditor;<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US"> </span></p>
- <p class="MsoNormal"><span lang="EN-US">[CustomEditor(typeof(CustomClass))]<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">public class CustomClassEditor : Editor {<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- public override void OnInspectorGUI() {<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- // </span><span style="font-family:宋体;mso-ascii-font-family:Calibri;
- mso-ascii-theme-font:minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:
- minor-fareast;mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin">自定义代码</span><span lang="EN-US"><o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- DrawDefaultInspector();<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- // </span><span style="font-family:宋体;mso-ascii-font-family:Calibri;
- mso-ascii-theme-font:minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:
- minor-fareast;mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin">自定义代码</span><span lang="EN-US"><o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US"> }<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">}</span></p>
复制代码
当然,这两种方式对开发者自定义的组件的显示是没有问题的,因为自定义的组件本身的绘制方式就是利用的Editor类中的OnInspectorGUI方法。 Unity内置的一些组件,比如说AudioSource这个组件,有的开发者发现扩展了它以后,显示在Inspector中的样式跟默认的有很大区别。 代码: - <p class="MsoNormal"><span lang="EN-US">using UnityEngine;<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">using UnityEditor;<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US"> </span></p>
- <p class="MsoNormal"><span lang="EN-US">[CustomEditor(typeof(AudioSource))]<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">public class CustomAudioSourceEditor :
- Editor {<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US"> public
- override void OnInspectorGUI() {<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- DrawDefaultInspector();<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- CreateEditor(targets, EditorGUILayout.HelpBox("</span><span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;
- mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:
- Calibri;mso-hansi-theme-font:minor-latin">我最牛逼!</span><span lang="EN-US">",
- MessageType.Info);<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US"> }<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">}</span></p>
复制代码
原始图片: 修改后图片: 造成这一问题的原因是Unity默认的大部分组件Unity官方代码也通过继承Editor的方式对其样式进行了自定义,因此我们需要得到AudioSource的Editor派生类,调用他的OnInspectorGUI方法。在这里我们通过反射进行调用CreateEditor(targets,typeof(Editor).Assembly.GetType("UnityEditor.AudioSourceInspector")).OnInspectorGUI();来解决样式不一致的问题。 完整代码: - <p class="MsoNormal"><span lang="EN-US">using UnityEngine;<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">using UnityEditor;<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US"> </span></p>
- <p class="MsoNormal"><span lang="EN-US">[CustomEditor(typeof(AudioSource))]<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">public class CustomAudioSourceEditor :
- Editor {<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US"> public
- override void OnInspectorGUI() {<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- CreateEditor(targets, typeof(Editor).Assembly.GetType("UnityEditor.AudioSourceInspector")).OnInspectorGUI();<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- EditorGUILayout.HelpBox("</span><span style="font-family:宋体;
- mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
- 宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:Calibri;
- mso-hansi-theme-font:minor-latin">我最牛逼!</span><span lang="EN-US">",
- MessageType.Info);<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US"> }<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">}</span></p>
复制代码
如图所示: Unity交流qq群:935714213
|