首页 > 其他分享 >Unity编辑器扩展秘籍-反射解决ParticleSystemEditor的扩展显示错误的问题

Unity编辑器扩展秘籍-反射解决ParticleSystemEditor的扩展显示错误的问题

时间:2024-02-22 21:01:06浏览次数:32  
标签:ParticleSystemEditor 扩展 OnInspectorGUI Unity ParticleSystemInspector Editor publ

如果使用常规的扩展编辑器方法,为ParticleSystem增加一个自定义按钮

    [CustomEditor(typeof(ParticleSystem))]
    public class MyParticleSystemEditor:UnityEditor.Editor
    {
        private List<Material> _mats = new List<Material>();
        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();
            if (GUILayout.Button("Test"))
            {
                
            }
        }
    }


粒子系统的原始UI就被破坏了
主要原因是渲染ParticleSystem的Inspector类是ParticleSystemInspector,而ParticleSystemInspector类是internal的无法继承。如果直接继承Editor实现扩展,ParticleSystemInspector实现的功能就被覆盖了。
为了解决这个问题,需要使用CreateEditor方法并反射ParticleSystemInspector。

    [CustomEditor(typeof(ParticleSystem))]
    public class MyParticleSystemEditor:UnityEditor.Editor
    {
        public override void OnInspectorGUI()
        {
            //这里使用反射
            var editor = CreateEditor(targets,typeof(Editor).Assembly.GetType("UnityEditor.ParticleSystemInspector"));
            editor.OnInspectorGUI();
            if (GUILayout.Button("Test"))
            {
                
            }
        }
    }

标签:ParticleSystemEditor,扩展,OnInspectorGUI,Unity,ParticleSystemInspector,Editor,publ
From: https://www.cnblogs.com/terrynoya/p/18028144

相关文章

  • Unity引擎2D游戏开发,场景管理和切换
    需要用到的工具资源打包、远程热更新工具Addressables工具基本操作在Window菜单下方,会有AssetManagement,选择Addressables中的Groups会弹出相关菜单,将其拖入底部工具栏会提示没有创建Addressables的相关配置,则点击CreateAddressablesSettings这时候会在Project中,多出......
  • 1.3 使用pip管理Python扩展库
    常用pip命令使用方法pip命令示例说明pipfreeze[>packages.txt]列出已安装模块及其版本号,可使用重定向符>把扩展库信息保存到文件packages.txt中pipinstallSomePackage[==version]在线安装SomePackage模块,可以使用方括号内的形式指定扩展库版本pipinstallSo......
  • Unity引擎2D游戏开发,场景互动的逻辑实现
    创建接口由于所有可互动的物体都会有一个共通的属性,即“互动”的处理。因此,新建一个接口,让所有可互动的物体都实现这个接口内的互动处理方法新建接口创建一个处理互动逻辑的抽象方法publicinterfaceIInteractable{voidTriggerAction();}创建处理宝箱交互逻辑的脚......
  • Unity中关于刚体和碰撞器遇到的告警
    告警信息:Scripterror:OnCollisionEnter2DThismessageparameterhastobeoftype:Collision2DThemessagewillbeignored.  解决:经查验发现,由于该脚本是粘贴的类似功能脚本,而粘贴前使用的触发器,因此方法为 privatevoidOnTriggerStay2D(Collider2Dcollision),而......
  • Unity引擎2D游戏开发,切换场景与人物可互动标识总结
    切换场景可以通过新建一个持久化地场景,将所有常驻元素放置进此场景里面,然后再将进入的场景加载(Loud)在Hierarchy窗口中。如果切换了其他某一个场景,再将离开的场景停用(Unload),进入的场景加载(Loud),即可实现。创建持久化场景,移入Hierarchy将所有永恒不变,常驻的元素移入此创建的持久......
  • 扩展知识:vscode配置easyx
    扩展知识:vscode配置easyx前言‍因为个人用习惯了vscode,对于visualstudio的操作只能说相当程度上很不适应,因此,我打算经历一番配置,让vscode可以配置上easyx。尽管参考了不少博客,但是不是在被踢来踢去的就是搞得特别复杂。不行,只能自己尝试了。‍笔者环境:MinGW-w64(因为我根......
  • 扩展知识:vscode配置easyx
    扩展知识:vscode配置easyx前言‍因为个人用习惯了vscode,对于visualstudio的操作只能说相当程度上很不适应,因此,我打算经历一番配置,让vscode可以配置上easyx。尽管参考了不少博客,但是不是在被踢来踢去的就是搞得特别复杂。不行,只能自己尝试了。‍笔者环境:MinGW-w64(因为我根......
  • Unity中的SerializeReference使用简介
    Unity默认可以序列化值类型,Serializable属性修饰的类型,派生自UnityEngine.Object的类型,通常这些类型已经足以供日常使用了.但是有时我们希望在编辑器面板上序列化一个接口或者抽象类,则需要用到SerializeReference属性.假定我们有一个接口IEatable,并实现了两个类Brea......
  • Unity基于AssetBundle资源管理流程详解
    在Unity游戏开发中,资源管理是一个非常重要的环节。随着游戏的发展,资源会变得越来越庞大,因此需要一种高效的资源管理方式来减少内存占用和加快加载速度。AssetBundle是Unity提供的一种资源打包和加载方式,可以将资源打包成一个独立的文件,然后在运行时进行加载和卸载。本文将详细介绍......
  • Unity MVC开发模式与开发流程详解
    在Unity游戏开发中,采用MVC(Model-View-Controller)模式是一种非常常见的设计模式。MVC模式将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。这种模式可以有效地分离应用程序的逻辑和用户界面,使得代码更易于维护和扩展。本文将详细介绍Unity中的MVC开发模式及其开发流......