通过反射调用Unity编辑器提供的各种功能
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了通过反射调用Unity编辑器提供的各种功能,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2390字,纯文字阅读大概需要4分钟。
内容图文
Unity编辑器功能丰富易上手,其实编辑器提供的大多数菜单操作,在代码里面都是能够找到对应接口的,但是这些接口都没有对我们开放,怎么办?
很简单,直接使用反射调用即可。
首先使用Reflector或ILSpy将UnityEditor和UnityEngine进行反编译(有源码的可以直接查看源码更好),然后在里面找你需要的功能即可,unity的底层代码命名是非常规范的,多数功能都能直观的找到:
下图中是Hierarchy视图中一些操作函数,怎么样,是不是很直观:
怎么调用这些函数呢,下面展示了static function和member function的调用方式,参考着用即可:
using UnityEngine; using UnityEditor; using System.Collections; using System.Collections.Generic; public class DIYEditor : EditorWindow { private static EditorWindow window; [MenuItem( " DIY/SelfEditor " )] public static void Execute() { if (window == null) window = (DIYEditor)GetWindow(typeof(DIYEditor)); window.minSize = new Vector2(300, 300); window.Show(); } privatevoid OnGUI() { if (GUILayout.Button("Project.DuplicateSelectedAssets", GUILayout.Height(50))) { ProjectDuplicate(); } if (GUILayout.Button("Hierarchy.DuplicateSelectedAssets", GUILayout.Height(50))) { HierarchyDuplicate(); } if (GUILayout.Button("GameView.SizeSelection", GUILayout.Height(50))) { HierarchyDuplicate(); } } // 拷贝Project视图中的某个Prefabprivatevoid ProjectDuplicate() { var gvWndType = typeof(Editor).Assembly.GetType("UnityEditor.ProjectWindowUtil"); var duplicate = gvWndType.GetMethod("DuplicateSelectedAssets", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static); duplicate.Invoke(null, null); } // 拷贝Hierarchy视图中的某个Prefab,优点:(1)速度快(2)保持引用关系。在代码中Instantiate会丢失引用,并且速度很慢privatevoid HierarchyDuplicate() { var gvWndType = typeof(Editor).Assembly.GetType("UnityEditor.SceneHierarchyWindow"); var gvWnd = EditorWindow.GetWindow(gvWndType); var duplicateSelectedFunc = gvWndType.GetMethod("DuplicateGO", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic); duplicateSelectedFunc.Invoke(gvWnd, null); } // 手动设置Game视图的分辨率,可以用来在编辑态下动态改变runtime分辨率publicstaticvoid SetGameView(int index) { var gvWndType = typeof(Editor).Assembly.GetType("UnityEditor.GameView"); var gvWnd = EditorWindow.GetWindow(gvWndType); var SizeSelectionCallback = gvWndType.GetMethod("SizeSelectionCallback", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic); SizeSelectionCallback.Invoke(gvWnd, newobject[] { index, null }); } }
总之,编辑器功能强大,皆能为我所用,方法就是反射,以上!
原文:https://www.cnblogs.com/sifenkesi/p/9780122.html
内容总结
以上是互联网集市为您收集整理的通过反射调用Unity编辑器提供的各种功能全部内容,希望文章能够帮你解决通过反射调用Unity编辑器提供的各种功能所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。