代码如下:
using
System
;
using
System
.
IO
;
#
if
UNITY_EDITOR
using
UnityEditor
;
#
endif
using
UnityEngine
;
namespace
QFramework
{
public
partial
class
Exporter
{
#
if
UNITY_EDITOR
[
MenuItem
(
"QFramework/1.导出 UnityPackage %e"
,
false
,
1
)
]
private
static
void
MenuClicked
(
)
{
var
generatePackageName
=
Exporter
.
GenerateUnityPackageName
(
)
;
EditorUtil
.
ExportPackage
(
"Assets/QFramework"
,
generatePackageName
+
".unitypackage"
)
;
EditorUtil
.
OpenInFolder
(
Path
.
Combine
(
Application
.
dataPath
,
"../"
)
)
;
}
#
endif
public
static
string
GenerateUnityPackageName
(
)
{
return
"QFramework_"
+
DateTime
.
Now
.
ToString
(
"yyyyMMdd_hh"
)
;
}
}
}
这个代码是一个完整的导出功能。而这个导出功能应该算是框架的内容,而这个代码要在 Editor 环境下才能运行,所以,我们要把这个文件放到 QFramework/Framework/Editor 目录下。
那么它之前是作为示例进行收集的,但是这个示例本身的学习功能没有那么强,更强的是导出功能。所以没有必要把它的 MenuItem 部分拆分到 Example 里。
根据以上结论,目录更改后如下:
更改这个目录之后,对应的菜单,我们也要改下,按照我们的约定和规则,我们只需要保证菜单与目录结构一致即可。
菜单更改后的代码如下:
using
System
;
using
System
.
IO
;
#
if
UNITY_EDITOR
using
UnityEditor
;
#
endif
using
UnityEngine
;
namespace
QFramework
{
public
partial
class
Exporter
{
#
if
UNITY_EDITOR
[
MenuItem
(
"QFramework/Framework/Editor/导出 UnityPackage %e"
,
false
,
1
)
]
private
static
void
MenuClicked
(
)
{
var
generatePackageName
=
GenerateUnityPackageName
(
)
;
EditorUtil
.
ExportPackage
(
"Assets/QFramework"
,
generatePackageName
+
".unitypackage"
)
;
EditorUtil
.
OpenInFolder
(
Path
.
Combine
(
Application
.
dataPath
,
"../"
)
)
;
}
#
endif
public
static
string
GenerateUnityPackageName
(
)
{
return
"QFramework_"
+
DateTime
.
Now
.
ToString
(
"yyyyMMdd_hh"
)
;
}
}
}
由于,我们已经把代码放到 Editor 目录下了,这样使用 UnityEditor 的 API 并不会影响我们项目的打包等操作了,所以我们可以把 UNITY_EDITOR 宏判断可以去掉了。
去掉后代码如下:
using
System
;
using
System
.
IO
;
using
UnityEditor
;
using
UnityEngine
;
namespace
QFramework
{
public
partial
class
Exporter
{
[
MenuItem
(
"QFramework/Framework/Editor/导出 UnityPackage %e"
,
false
,
1
)
]
private
static
void
MenuClicked
(
)
{
var
generatePackageName
=
GenerateUnityPackageName
(
)
;
EditorUtil
.
ExportPackage
(
"Assets/QFramework"
,
generatePackageName
+
".unitypackage"
)
;
EditorUtil
.
OpenInFolder
(
Path
.
Combine
(
Application
.
dataPath
,
"../"
)
)
;
}
public
static
string
GenerateUnityPackageName
(
)
{
return
"QFramework_"
+
DateTime
.
Now
.
ToString
(
"yyyyMMdd_hh"
)
;
}
}
}
等待编译之后,菜单栏如下: 虽然菜单层级变多了,但是我们是按照当前的约定和规则做的,所以要改也是先把目录结构整理完再改。
转载请注明地址:凉鞋的笔记:
liangxiegame.com
订阅全套专栏或参加小班:
liangxiegame.com
本文介绍了一个Unity项目中用于导出UnityPackage的代码优化过程,包括调整代码位置至Editor目录,修改菜单路径以匹配目录结构,以及移除UNITY_EDITOR预处理器指令,确保不影响项目打包。

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



