Unity自定义Inspector属性名特性以及特性自定义布局问题
创作时间:
作者:
@小白创作中心
Unity自定义Inspector属性名特性以及特性自定义布局问题
引用
CSDN
1.
https://m.blog.csdn.net/m0_68267247/article/details/144749497
在Unity开发中,Inspector面板的属性名默认显示为英文,这对于中文开发者来说不够友好。本文将介绍如何通过自定义Inspector属性名特性,实现属性名的本地化显示,并解决自定义布局问题。
前言:
在Unity中编辑属性时,默认会显示属性的英文名称。如果想要将其改为中文显示,但又不能改变属性名,那么自定义特性是一个很好的解决方案。
一、自定义特性
这一块没有什么要多说的,就是自定义特性
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
public class FieldNameAttribute : PropertyAttribute
{
internal string Name { get; private set; }
public FieldNameAttribute(string name)
{
Name = name;
}
}
#if UNITY_EDITOR
[CustomPropertyDrawer(typeof(FieldNameAttribute))]
public class FieldNameAttributeDrawer : PropertyDrawer
{
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
EditorGUI.PropertyField(position, property, new GUIContent((attribute as FieldNameAttribute).Name), property.hasChildren);
}
}
#endif
二、布局问题
这样写其实已经完成了基本效果,如图:
但是可以看到,虽然定义了属性,但我们没有处理其可见子元素的布局。为了解决这个问题,我们需要重写PropertyDrawer中的GetPropertyHeight函数:
public class FieldNameAttributeDrawer : PropertyDrawer
{
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
EditorGUI.PropertyField(position, property, new GUIContent((attribute as FieldNameAttribute).Name), property.hasChildren);
}
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
{
float baseHeight = base.GetPropertyHeight(property, label);
if (property.isExpanded)
{
if (property.propertyType == SerializedPropertyType.Generic)
{
return baseHeight + EditorGUIUtility.singleLineHeight * property.CountInProperty();
}
}
return baseHeight;
}
}
经过优化后的效果如下图所示:
热门推荐
实木门安装步骤与验收规范详解
限仓制度对投资市场的影响与重要性分析
新武器加入,解放军海军陆战队战力将提升多少?
“二十四节气歌”其实有八句,您可能没唱全
面向动态防伪应用的荧光电泳显示器件
上海原油期货趋势分析报告
云南古城美食探秘:从鸡豆凉粉到过桥米线
揭秘电信诈骗:为什么我们容易上当受骗?
关于儿童测量体温的那些事儿
中国篮球运动员,巅峰实力如何排名?
火影:当男忍者们留起长发,药师兜变成甜妹,佐助和鸣人变身御姐
1928年,张作霖出殡,规模宏大,孝子跪地,关东军假意前来悼念,当年发生了什么?
数九歌:冬日里的智慧与温情
2024年建筑工程行业五大挑战、七大趋势与四大应对之策解析
过度午睡有五大风险!三类人群最好不午睡
股骨颈骨折康复,6种简单方法分享
个性化还款策略:对个人财务状况、信用评分和生活的影响
石油输出国组织(OPEC):全球能源市场的关键玩家
中山大学团队开发新型IBD治疗系统,实现“菌群-免疫-炎症”多靶点协同治疗
能不能长寿,先查心率?专家透露:55岁后,心率别超这个数字
闭环思维:职场人必备的重要素养
海南代表委员为人才工作建言献策
新质生产力蜀山行 | 可视科学:用可视化技术诠释科学之美
装修油漆施工全流程详解:从乳胶漆到木材油漆的施工要点
为什么要设置任务优先级?如何设置?
指数移动平均线交易策略:从计算到实战应用
蜜袋鼯如何洗澡
电商物流优化:传统零售配送体系的智能升级方案
新国标来了!电动自行车行业将迎来哪些变化?
漫步塞上老街,触摸“塞外青城”的传承与新生