獲取Unity和UGUUI內置組件的屬性名


需求來源

在閱讀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

// 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(); } 
}
// 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(); } 
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM