位置: 编程技术 - 正文

Unity3D Editor类(Inspector) 编写经验总结

编辑:rootadmin
分类: Unity3D-- : 人阅读 评论(2) 收藏 举报EditoreditorInspectorunityUnityUnity3Dunity3dunity3DUnity3d

推荐整理分享Unity3D Editor类(Inspector) 编写经验总结,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

1. Editor类中的全部控件描画,都是通过GUI完成的,所以不一定非要使用EditorGUILayout,使用GUILayout有时候更方便。

2. 因为1, 所以我们可以使用GUI直接做一些完全自定义的描画。例如在一张图片上画一个区域选择框。

3. Inspector光标定位Bug,具体表现为,你的代码无错误,无任何提示。但Inspector的编辑光标定位却不准。我做了一些简单的测试:

3.1 该问题与 Component 脚本(就是你写的类)的编写和 Editor 类(也就是 Inspector 的自定义类)的编写无关。

3.2 该问题的出现,&#;乎与编译缓存有关,出现问题后,我尝试过删除Assets同级目录下的obj文件夹(这个文件夹可以随意删除)或Library文件夹(删除这个会导致全部的关系链接丢失,需要手动恢复脚本间的挂接关系),之后重新打开Unity,Inspector光标正常了。

3.3 我还遇到过,新建一个对象,Inspector光标定位异常。关闭Unity,再次打开,正常。

3.4 我还遇到过,前一天正常,第二天无任何修改,打开,Inspector光标定位异常。

3.5 经过反复测试发现,该bug&#;乎和MeshFilter有关。当你的Component中依赖了MeshFilter,但Mesh却是空,就会出现该bug。例如

[csharp] view plaincopyprint?[RequireComponent(typeof(MeshCollider), typeof(MeshRenderer))] public class Test : MonoBehaviour { …… }

所以我将MeshFilter的添加,延迟到了Start中。

[csharp] view plaincopyprint?void Start() { // 没有在定义时直接添加 MeshFilter 的依赖关系,是因为,直接那么做会导致Editor出错。 // 虽然很诡异,但不清楚原因。所以只有在Start中手动添加了。 MeshFilter mf = GetComponent<MeshFilter>(); if (mf == null) mf = gameObject.AddComponent<MeshFilter>(); …… } Unity3D Editor类(Inspector) 编写经验总结

4. EditorGUIUtility.LookLikeControls(f) 很有用,它可以让所有控件的前置标签的宽度统一。虽然不够灵活,但至少比没有强,不过也仅仅比没有强一点。这句代码可以写在 public override void OnInspectorGUI() 中。

5. 有些资料中说,Editor的派生类不能被继承,这个是错误的。你可以从Control派生出Button,然后让Button的ButtonEditor再继承ControlEditor,这样可以省去很多功夫。

6. Editor写成模板类的时候,需要小心。public class ControlEditor<T> : Editor这样的定义,将不能编译出正确的Inspector。

7. 编辑环境下,和运行环境下,是两套不同的体系,为Inspector带来的问题是,动态数据无法直接被应用到Runtime(运行时)中。例如,你根据一个xml解析出一些数据。在编辑中,你会描画一个文件选择框(TextAsset对象),然后选择一个xml文件。之后文件被解析,在ExecuteInEditMode类中,编辑时这些解析出的数据也可以正常使用。一旦你点击了运行那个小三角,一切解析出的临时数据都将灰飞烟灭,记得在Start或Update中检查必要的数据,发现没有就及时处理。所见即所得有时候只是幻觉。

8. 你可以定义一些GUIStyle,用来控制描画样式。这些GUIStyle可以是系统默认的,例如

[csharp] view plaincopyprint?GUIStyle Style = new GUIStyle(EditorStyles.toolbarButton); 也可以完全的自定义。但记得,直接修改EditorStyles.toolbarButton会让系统所有用到该GUIStyle的地方一起变化。所以建议不要直接修改系统默认样式。

9. 如果你在找ComboBox或List这样的控件,不用找了,GUI中没有,也没给你任何自己简单的创造。自己做吧。

. 如果你认为可以用一个字符串数组生成一个弹出菜单,不用做梦了,只有enum类型可以这么做。所以如果你的菜单是动态的,那就是个噩梦啊。

. GUI中的控件并不是以面向对象思想设计的,自然,Editor类中的描画也就变得一塌糊涂。其底层封装应该是类&#;GDI&#;这样的描画库。但GUI的封装做的并不好。所以很多时候,发挥创造力,自己倒腾自己需要的控件吧。

综上,如果不是因为编辑器类不能用别的办法描画,我早不用GUI了。在生产环境下,还是放弃GUI吧,有很多实用的UI扩展库,例如EZGUI、NGUI,我自己也正在写一套,名字叫做Chords UI,中文名和弦。目前在整理中。

unity优化 1.尽量避免每帧处理比如:functionUpdate(){DoSomeThing();}可改为每5帧处理一次:functionUpdate(){if(Time.frameCount%5==0){DoSomeThing();}}2.定时重复处理用InvokeRepeating函数

【Shader】边缘发光效果的两种写法 我们可以看到很多游戏经常会有这种模型边缘发光的效果,看起来很高大上的样子。其实实现起来挺简单的,网上也有很多这样的例子分享,现在我也

《C#游戏开发快速入门教程》 欢迎大家到我们团队的官网上查看此书的详细介绍,下面是链接《C#游戏开发快速入门教程》我们的宗旨是:我们只做最专业的技术传播者!为了让广大

标签: Unity3D Editor类(Inspector) 编写经验总结

本文链接地址:https://www.jiuchutong.com/biancheng/369363.html 转载请保留说明!

上一篇:编辑器拓展 CustomEditor(编辑器ui)

下一篇:【Shader】边缘发光效果的两种写法([edge(边缘)])

  • 哪些占用土地的行为不征收耕地占用税?
  • 增值税认证勾选平台
  • 长期股权投资其他综合收益什么时候转留存收益
  • 什么是资本性支出和支出
  • 事业单位存货发生盘亏或盘盈处理
  • 会计核算原则主要包括
  • 货币资金核算的调查报告
  • 报关单报关没做收入怎么办
  • 企业资产负债表图片
  • 如何理解出口退税政策
  • 营改增后房地产开发企业需要交哪些税?
  • 对供应商罚款通知单怎么写
  • 法律责任的具体内容
  • 法律关系三要素表
  • 小微企业增值税申报表怎么填
  • 17点增值税发票能开吗
  • 合同印花税多交了怎么退
  • 增值税专票的收款人必须是个人嘛
  • 201金8税盘抵扣期限是多久?
  • 浅谈收入与成本的关系
  • 期末未分配利润大于期初未分配利润+期末净利润
  • 固定资产减值准备属于什么科目
  • 增值税进项大于销项月末需要结转吗
  • 延期申报的程序
  • 利润表适用执行小企业
  • 司法拍卖机器设备税率
  • 从农民手中收购农产品增值税处理
  • 境内单位和个人将船舶出租到境外的,不征收车船税
  • win11任务管理器怎么没有了
  • win7安装netframework4.5
  • 补提固定资产折旧和汇算清缴有关系吗
  • 增值税账务处理 一般纳税人
  • 交易性金融资产的入账价值怎么算
  • 城镇土地使用税纳税义务发生时间
  • codeigniter3中文手册
  • 货物运输业增值税专用发票
  • 怎样把htm文件转成excel
  • java项目报错
  • 一文详解卡尔曼人物形象
  • 在建工程预付款超过审计价怎么办
  • 技术转让免征增值税需要备案吗
  • 转让不动产为什么能差额
  • 补充医疗保险属于什么
  • 织梦cms可以商用吗
  • 特惠贷利息怎么算
  • 医用增值税发票
  • 债权投资产生的暂时性差异确认所得税吗
  • 无形资产摊销是当月增加当月摊销吗
  • 企业净利率多少算高
  • 现金日记账采用哪一种账簿的形式
  • 交易性金融资产公允价值变动怎么算
  • 公司注销后原有未使用的包装还可以用吗怎么办
  • 固定资产的主要特征
  • 税控设备管理办法
  • 企业应付职工薪酬增加说明什么
  • 事业编制可以带计算器吗
  • 当前旅游业
  • 离岸银行账户开户
  • 房地产项目企业
  • 数据库表的查询学会了什么
  • sql server如何查询
  • 删除sql server2008
  • iexploresrv.exe
  • window10收藏夹怎么导出
  • 在windows 7中任务栏儿
  • centos7(core)
  • linux主机名是什么意思
  • 电脑window8系统怎么样
  • 苹果macmimi
  • npscheck.exe - npscheck是什么进程 有什么用
  • opengl多窗口绘图
  • unity3D游戏开发
  • jquery简单例子
  • js表单事件有哪些
  • js正则检验手机号
  • 安卓竖屏改横屏
  • JavaScript onkeydown事件入门实例(键盘某个按键被按下)
  • MVC+jQuery.Ajax异步实现增删改查和分页
  • 税务部门立足
  • 年度关联业务往来报告
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设