书接上回,接着需要做的是把
图标
和
汉化
加入右键菜单中,做成可选的,而不是写死的。
这个功能理应开始的时候就先确认,但我开始没想做这么多,算是额外内容吧。 所以,不会写的太详细。
一、添加菜单项
①、
第一步基本可以不用想,在
ProBuilderEditor
类中,对于的位置添加菜单项。
menu
.
AddItem
(
new
GUIContent
(
"Use Icon Mode"
,
""
)
,
s_IsIconGui
,
Menu_ToggleIconMode
)
;
menu
.
AddItem
(
new
GUIContent
(
"Use Text Mode"
,
""
)
,
!
s_IsIconGui
,
Menu_ToggleIconMode
)
;
//<<<<<<<<<<<<<<<<<<<<<<<<< 添加代码
menu
.
AddSeparator
(
""
)
;
menu
.
AddItem
(
new
GUIContent
(
"Text Mode + Icon"
,
""
)
,
<
是否开启条件
>
,
<
切换方法
>
)
;
menu
.
AddItem
(
new
GUIContent
(
"Text Mode + 汉化"
,
""
)
,
<
是否开启条件
>
,
<
切换方法
>
)
;
//>>>>>>>>>>>>>>>>>>>>>>>>>
②、
补全上面代码,看似填空题,实则举一反三,照猫画虎嘛。 首先是条件,
[
UserSetting
(
"Toolbar"
,
"Icon GUI"
,
"Toggles the ProBuilder window interface between text and icon versions."
)
]
internal
static
Pref
<
bool
>
s_IsIconGui
=
new
Pref
<
bool
>
(
"editor.toolbarIconGUI"
,
false
)
;
//<<<<<<<<<<<<<<<<<<<<<<< 添加代码
[
UserSetting
(
"Toolbar"
,
"Text Mode + Icon"
,
"在 Text Mode 下显示图标。"
)
]
internal
static
Pref
<
bool
>
s_EnableTextModeIcon
=
new
Pref
<
bool
>
(
"editor.toolbarTextModeIcon"
,
false
)
;
[
UserSetting
(
"Toolbar"
,
"Text Mode + ZH"
,
"在 Text Mode 下使用中文标题。"
)
]
internal
static
Pref
<
bool
>
s_EnableTextModeZH
=
new
Pref
<
bool
>
(
"editor.toolbarTextModeZH"
,
false
)
;
//>>>>>>>>>>>>>>>>>>>>>>>
再是切换方法,
void
Menu_ToggleIconMode
(
)
{
s_IsIconGui
.
value
=
!
s_IsIconGui
.
value
;
IconModeChanged
(
)
;
}
//<<<<<<<<<<<<<<<<<<<<<<<<< 添加代码
void
Menu_ToggleTextMode_Icon
(
)
{
//s_EnableTextModeIcon.value = !s_EnableTextModeIcon.value;
//IconModeChanged();
//直接这样照搬不是不想,但为了顺应使用直觉,所以微改了一下。
s_EnableTextModeIcon
.
value
=
s_IsIconGui
|
!
s_EnableTextModeIcon
.
value
;
s_IsIconGui
.
value
=
false
;
IconModeChanged
(
)
;
}
void
Menu_ToggleTextMode_ZH
(
)
{
//同理
s_EnableTextModeZH
.
value
=
s_IsIconGui
|
!
s_EnableTextModeZH
.
value
;
s_IsIconGui
.
value
=
false
;
IconModeChanged
(
)
;
}
//>>>>>>>>>>>>>>>>>>>>>>>>>
之后将第一步的代码补全,
//<<<<<<<<<<<<<<<<<<<<<<<<<
menu
.
AddSeparator
(
""
)
;
menu
.
AddItem
(
new
GUIContent
(
"Text Mode + Icon"
,
""
)
,
!
s_IsIconGui
&
s_EnableTextModeIcon
,
Menu_ToggleTextMode_Icon
)
;
menu
.
AddItem
(
new
GUIContent
(
"Text Mode + 汉化"
,
""
)
,
!
s_IsIconGui
&
s_EnableTextModeZH
,
Menu_ToggleTextMode_ZH
)
;
//>>>>>>>>>>>>>>>>>>>>>>>>>
选单就添加完成了。
二、绑定功能
①、
还是先照猫画虎的,将变量引用到
MenuAction
类中, 这步其实不是必要的,但强迫症表示还是顺着来吧, 毕竟直接调用代码太长看着也不舒服。
protected
MenuAction
(
)
{
iconMode
=
ProBuilderEditor
.
s_IsIconGui
;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 添加代码
textModeIcon
=
ProBuilderEditor
.
s_EnableTextModeIcon
;
textModeZH
=
ProBuilderEditor
.
s_EnableTextModeZH
;
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
}
protected
bool
iconMode
{
get
;
set
;
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 添加代码
protected
bool
textModeIcon
{
get
;
set
;
}
protected
bool
textModeZH
{
get
;
set
;
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
②、
绑定
Icon
相关的修改,
//第一处,不用说 Button 的 GUIContent
GUIContent
guiContent
=
new
GUIContent
(
TranslateMT
(
menuTitle
)
,
textModeIcon
?
(
buttonEnabled
||
!
disabledIcon
?
icon
:
disabledIcon
)
:
null
)
;
if
(
GUILayout
.
Button
(
guiContent
,
MenuActionStyles
.
buttonStyleVertical
)
)
//第二处,后面 [+] Button 的 GUILayout.MaxHeight
if
(
DoAltButton
(
GUILayout
.
MaxWidth
(
21
)
,
GUILayout
.
MaxHeight
(
textModeIcon
?
Mathf
.
Max
(
16
,
guiContent
.
image
.
height
+
4
)
:
16
)
)
)
//第三处,GetSize(...) 方法中,当有图标时需要的额外计算
if
(
textModeIcon
)
{
bool
buttonEnabled
=
(
menuActionState
&
MenuActionState
.
Enabled
)
==
MenuActionState
.
Enabled
;
Texture2D
t
=
(
buttonEnabled
||
!
disabledIcon
?
icon
:
disabledIcon
)
;
if
(
t
)
{
m_LastCalculatedSize
.
x
+=
t
.
width
;
m_LastCalculatedSize
.
y
=
System
.
Math
.
Max
(
m_LastCalculatedSize
.
y
,
t
.
height
)
;
}
}
③、
绑定
汉化
相关的修改, 汉化的就更省事了,直接在之前加的
TranslateMT
方法里添一行就可以了。
internal
string
TranslateMT
(
string
menuTitle
)
{
if
(
!
textModeZH
)
return
menuTitle
;
//添加这一行就搞定了
return
menuTitleDic
.
ContainsKey
(
menuTitle
)
?
menuTitleDic
[
menuTitle
]
:
menuTitle
;
}
不过,在上一篇结尾,我们对
TooltipContent
类,也做了汉化。 所以这也不能忘了,
internal
string
GetSummary
(
)
{
if
(
!
ProBuilderEditor
.
s_EnableTextModeZH
)
return
summaryOir
;
//同样一行搞定
return
summaryDic
.
ContainsKey
(
title
)
?
summaryDic
[
title
]
:
summaryOir
;
}
这就大功告成了🎉🎉🎉
最后再上一次成果图
附、
修改的插件,欢迎自取 -
GitHub链接
Ps.这应该是最后一篇了,虽然还有些想改的。 比如
创建模型
或是
倒角
的时候,总是要修改参数在执行,想给这些加个
保存预设
的功能。 但之后一段时间需要准备一些东西,所以就告一段落了。但是大家还是可以尝试一下的。 我有空还是继续更新
自定义Inspector面板
的文章吧。
88

被折叠的 条评论
为什么被折叠?



