获取Unity和UGUUI内置组件的属性名

本文为作者原创,转载请注明出处:https://www.cnblogs.com/zhaoqingqing/p/14821582.html



需求来源#

在阅读UGUI的源码时,发现Unity对于私有字段才加了[[SerializeField]]标签,而public的没有,且在Editor扩展中,也是查找带序列化标签的私有字段进行修改,那么在开发编辑器插件时,就很有必要知道私有字段名,因为在Inspector中看到是公用字段名(如果切换到中文之后就是汉字),那么怎样获取这个序列化属性的名字呢?

快速获得属性名#

对于Unity自带组件的某些属性,如果你不知道属性名称,可以这样做:

  1. 选中组件中所在的GameObject,转到属性面板(Inspect)的组件上,把鼠标移到你要的属性上
  2. 按住Shift+右键 - 选择 打印属性路径(Print Property Path),在Console中就会打印你鼠标所在的属性名

PS. 对于自定义的脚本,如果是属性而不是字段,就是有get和set的,也是可以这样操作的,像这样的[SerializeField] public string LangId;就无法使用。

image-20210528113910950

ugui的源代码示例#

如果在编辑器开发要访问Selectable.cs这两个属性是m_Colors和m_TargetGraphic,而Inspector上显示的是colors和targetGraphic

Copy
// Colors used for a color tint-based transition. [FormerlySerializedAs("colors")] [SerializeField] private ColorBlock m_Colors = ColorBlock.defaultColorBlock; public ColorBlock colors { get { return m_Colors; } set {if (SetPropertyUtility.SetStruct(ref m_Colors, value)) OnSetProperty(); } }
Copy
// Graphic that will be colored. [FormerlySerializedAs("highlightGraphic")] [FormerlySerializedAs("m_HighlightGraphic")] [SerializeField] private Graphic m_TargetGraphic; public Graphic targetGraphic { get { return m_TargetGraphic; } set { if (SetPropertyUtility.SetClass(ref m_TargetGraphic, value)) OnSetProperty(); } }
作者:赵青青   一名在【网易游戏】做游戏开发的程序员,擅长Unity3D,游戏开发,.NET等领域。
本文版权归作者和博客园共有,欢迎转载,转载之后请务必在文章明显位置标出原文链接和作者,谢谢。
如果本文对您有帮助,请点击【推荐】您的赞赏将鼓励我继续创作!想跟我一起进步么?那就【关注】我吧。
posted @   赵青青  阅读(722)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
阅读排行:
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 易语言 —— 开山篇
· Trae初体验
历史上的今天:
2016-05-28 Unity VR全景漫游
点击右上角即可分享
微信分享提示
CONTENTS