Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
guo450212436
et
提交
a9b44b68
E
et
项目概览
guo450212436
/
et
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
et
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
a9b44b68
编写于
9月 14, 2020
作者:
Hsiung
提交者:
GitHub
9月 14, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
根据当前的目标平台自动选择打包平台; (#191)
存储打包设置 添加清理文件夹选项 添加切换平台提醒
上级
33860994
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
248 addition
and
112 deletion
+248
-112
Unity/Assets/Editor/BuildEditor/BuildEditor.cs
Unity/Assets/Editor/BuildEditor/BuildEditor.cs
+88
-10
Unity/Assets/Editor/BuildEditor/BuildHelper.cs
Unity/Assets/Editor/BuildEditor/BuildHelper.cs
+108
-102
Unity/Assets/Editor/BuildEditor/ETBuildSettings.asset
Unity/Assets/Editor/BuildEditor/ETBuildSettings.asset
+19
-0
Unity/Assets/Editor/BuildEditor/ETBuildSettings.asset.meta
Unity/Assets/Editor/BuildEditor/ETBuildSettings.asset.meta
+8
-0
Unity/Assets/Editor/BuildEditor/ETBuildSettings.cs
Unity/Assets/Editor/BuildEditor/ETBuildSettings.cs
+14
-0
Unity/Assets/Editor/BuildEditor/ETBuildSettings.cs.meta
Unity/Assets/Editor/BuildEditor/ETBuildSettings.cs.meta
+11
-0
未找到文件。
Unity/Assets/Editor/BuildEditor/BuildEditor.cs
浏览文件 @
a9b44b68
using
System.Collections.Generic
;
using
System.Diagnostics
;
using
System.IO
;
using
System.Linq
;
...
...
@@ -8,7 +9,7 @@ using Object = UnityEngine.Object;
namespace
ET
{
public
class
BundleInfo
public
class
BundleInfo
{
public
List
<
string
>
ParentPaths
=
new
List
<
string
>();
}
...
...
@@ -30,27 +31,76 @@ namespace ET
public
class
BuildEditor
:
EditorWindow
{
private
readonly
Dictionary
<
string
,
BundleInfo
>
dictionary
=
new
Dictionary
<
string
,
BundleInfo
>()
;
private
const
string
settingAsset
=
"Assets/Editor/BuildEditor/ETBuildSettings.asset"
;
private
readonly
Dictionary
<
string
,
BundleInfo
>
dictionary
=
new
Dictionary
<
string
,
BundleInfo
>();
private
PlatformType
activePlatform
;
private
PlatformType
platformType
;
private
bool
clearFolder
;
private
bool
isBuildExe
;
private
bool
isContainAB
;
private
BuildType
buildType
;
private
BuildOptions
buildOptions
=
BuildOptions
.
AllowDebugging
|
BuildOptions
.
Development
;
private
BuildOptions
buildOptions
;
private
BuildAssetBundleOptions
buildAssetBundleOptions
=
BuildAssetBundleOptions
.
None
;
private
ETBuildSettings
buildSettings
;
[
MenuItem
(
"Tools/打包工具"
)]
public
static
void
ShowWindow
()
{
GetWindow
(
typeof
(
BuildEditor
));
EditorWindow
window
=
GetWindow
<
BuildEditor
>(
true
,
"打包工具"
);
window
.
minSize
=
new
Vector2
(
420
,
220
);
window
.
maxSize
=
new
Vector2
(
700
,
400
);
}
private
void
OnGUI
()
private
void
OnEnable
()
{
#if UNITY_ANDROID
activePlatform
=
PlatformType
.
Android
;
#elif UNITY_IOS
activePlatform
=
PlatformType
.
IOS
;
#elif UNITY_STANDALONE_WIN
activePlatform
=
PlatformType
.
PC
;
#elif UNITY_STANDALONE_OSX
activePlatform
=
PlatformType
.
MacOS
;
#else
activePlatform
=
PlatformType
.
None
;
#endif
platformType
=
activePlatform
;
if
(!
File
.
Exists
(
settingAsset
))
{
buildSettings
=
new
ETBuildSettings
();
AssetDatabase
.
CreateAsset
(
buildSettings
,
settingAsset
);
}
else
{
buildSettings
=
AssetDatabase
.
LoadAssetAtPath
<
ETBuildSettings
>(
settingAsset
);
clearFolder
=
buildSettings
.
clearFolder
;
isBuildExe
=
buildSettings
.
isBuildExe
;
isContainAB
=
buildSettings
.
isContainAB
;
buildType
=
buildSettings
.
buildType
;
buildAssetBundleOptions
=
buildSettings
.
buildAssetBundleOptions
;
}
}
private
void
OnDisable
()
{
SaveSettings
();
}
private
void
OnGUI
()
{
EditorGUILayout
.
LabelField
(
"打包平台:"
);
this
.
platformType
=
(
PlatformType
)
EditorGUILayout
.
EnumPopup
(
platformType
);
this
.
clearFolder
=
EditorGUILayout
.
Toggle
(
"清理资源文件夹: "
,
clearFolder
);
this
.
isBuildExe
=
EditorGUILayout
.
Toggle
(
"是否打包EXE: "
,
this
.
isBuildExe
);
this
.
isContainAB
=
EditorGUILayout
.
Toggle
(
"是否同将资源打进EXE: "
,
this
.
isContainAB
);
this
.
buildType
=
(
BuildType
)
EditorGUILayout
.
EnumPopup
(
"BuildType: "
,
this
.
buildType
);
EditorGUILayout
.
LabelField
(
"BuildAssetBundleOptions(可多选):"
);
this
.
buildAssetBundleOptions
=
(
BuildAssetBundleOptions
)
EditorGUILayout
.
EnumFlagsField
(
this
.
buildAssetBundleOptions
);
switch
(
buildType
)
{
...
...
@@ -61,18 +111,46 @@ namespace ET
this
.
buildOptions
=
BuildOptions
.
None
;
break
;
}
this
.
buildAssetBundleOptions
=
(
BuildAssetBundleOptions
)
EditorGUILayout
.
EnumFlagsField
(
"BuildAssetBundleOptions(可多选): "
,
this
.
buildAssetBundleOptions
);
if
(
GUILayout
.
Button
(
"开始打包"
))
GUILayout
.
Space
(
5
);
if
(
GUILayout
.
Button
(
"开始打包"
,
GUILayout
.
ExpandHeight
(
true
)))
{
if
(
this
.
platformType
==
PlatformType
.
None
)
{
Log
.
Error
(
"请选择打包平台!"
);
ShowNotification
(
new
GUIContent
(
"请选择打包平台!"
)
);
return
;
}
BuildHelper
.
Build
(
this
.
platformType
,
this
.
buildAssetBundleOptions
,
this
.
buildOptions
,
this
.
isBuildExe
,
this
.
isContainAB
);
if
(
platformType
!=
activePlatform
)
{
switch
(
EditorUtility
.
DisplayDialogComplex
(
"警告!"
,
$"当前目标平台为
{
activePlatform
}
, 如果切换到
{
platformType
}
, 可能需要较长加载时间"
,
"切换"
,
"取消"
,
"不切换"
))
{
case
0
:
activePlatform
=
platformType
;
break
;
case
1
:
return
;
case
2
:
platformType
=
activePlatform
;
break
;
}
}
BuildHelper
.
Build
(
this
.
platformType
,
this
.
buildAssetBundleOptions
,
this
.
buildOptions
,
this
.
isBuildExe
,
this
.
isContainAB
,
this
.
clearFolder
);
}
GUILayout
.
Space
(
5
);
}
private
void
SaveSettings
()
{
buildSettings
.
clearFolder
=
clearFolder
;
buildSettings
.
isBuildExe
=
isBuildExe
;
buildSettings
.
isContainAB
=
isContainAB
;
buildSettings
.
buildType
=
buildType
;
buildSettings
.
buildAssetBundleOptions
=
buildAssetBundleOptions
;
EditorUtility
.
SetDirty
(
buildSettings
);
AssetDatabase
.
SaveAssets
();
}
}
}
Unity/Assets/Editor/BuildEditor/BuildHelper.cs
浏览文件 @
a9b44b68
...
...
@@ -4,106 +4,112 @@ using UnityEditor;
namespace
ET
{
public
static
class
BuildHelper
{
private
const
string
relativeDirPrefix
=
"../Release"
;
public
static
string
BuildFolder
=
"../Release/{0}/StreamingAssets/"
;
[
MenuItem
(
"Tools/web资源服务器"
)]
public
static
void
OpenFileServer
()
{
ProcessHelper
.
Run
(
"dotnet"
,
"FileServer.dll"
,
"../FileServer/"
);
}
public
static
void
Build
(
PlatformType
type
,
BuildAssetBundleOptions
buildAssetBundleOptions
,
BuildOptions
buildOptions
,
bool
isBuildExe
,
bool
isContainAB
)
{
BuildTarget
buildTarget
=
BuildTarget
.
StandaloneWindows
;
string
exeName
=
"ET"
;
switch
(
type
)
{
case
PlatformType
.
PC
:
buildTarget
=
BuildTarget
.
StandaloneWindows64
;
exeName
+=
".exe"
;
break
;
case
PlatformType
.
Android
:
buildTarget
=
BuildTarget
.
Android
;
exeName
+=
".apk"
;
break
;
case
PlatformType
.
IOS
:
buildTarget
=
BuildTarget
.
iOS
;
break
;
case
PlatformType
.
MacOS
:
buildTarget
=
BuildTarget
.
StandaloneOSX
;
break
;
}
string
fold
=
string
.
Format
(
BuildFolder
,
type
);
if
(!
Directory
.
Exists
(
fold
))
{
Directory
.
CreateDirectory
(
fold
);
}
Log
.
Info
(
"开始资源打包"
);
BuildPipeline
.
BuildAssetBundles
(
fold
,
buildAssetBundleOptions
,
buildTarget
);
GenerateVersionInfo
(
fold
);
Log
.
Info
(
"完成资源打包"
);
if
(
isContainAB
)
{
FileHelper
.
CleanDirectory
(
"Assets/StreamingAssets/"
);
FileHelper
.
CopyDirectory
(
fold
,
"Assets/StreamingAssets/"
);
}
if
(
isBuildExe
)
{
AssetDatabase
.
Refresh
();
string
[]
levels
=
{
"Assets/Scenes/Init.unity"
,
};
Log
.
Info
(
"开始EXE打包"
);
BuildPipeline
.
BuildPlayer
(
levels
,
$"
{
relativeDirPrefix
}
/
{
exeName
}
"
,
buildTarget
,
buildOptions
);
Log
.
Info
(
"完成exe打包"
);
}
}
private
static
void
GenerateVersionInfo
(
string
dir
)
{
VersionConfig
versionProto
=
new
VersionConfig
();
GenerateVersionProto
(
dir
,
versionProto
,
""
);
using
(
FileStream
fileStream
=
new
FileStream
(
$"
{
dir
}
/Version.txt"
,
FileMode
.
Create
))
{
byte
[]
bytes
=
JsonHelper
.
ToJson
(
versionProto
).
ToByteArray
();
fileStream
.
Write
(
bytes
,
0
,
bytes
.
Length
);
}
}
private
static
void
GenerateVersionProto
(
string
dir
,
VersionConfig
versionProto
,
string
relativePath
)
{
foreach
(
string
file
in
Directory
.
GetFiles
(
dir
))
{
string
md5
=
MD5Helper
.
FileMD5
(
file
);
FileInfo
fi
=
new
FileInfo
(
file
);
long
size
=
fi
.
Length
;
string
filePath
=
relativePath
==
""
?
fi
.
Name
:
$"
{
relativePath
}
/
{
fi
.
Name
}
"
;
versionProto
.
FileInfoDict
.
Add
(
filePath
,
new
FileVersionInfo
{
File
=
filePath
,
MD5
=
md5
,
Size
=
size
,
});
}
foreach
(
string
directory
in
Directory
.
GetDirectories
(
dir
))
{
DirectoryInfo
dinfo
=
new
DirectoryInfo
(
directory
);
string
rel
=
relativePath
==
""
?
dinfo
.
Name
:
$"
{
relativePath
}
/
{
dinfo
.
Name
}
"
;
GenerateVersionProto
(
$"
{
dir
}
/
{
dinfo
.
Name
}
"
,
versionProto
,
rel
);
}
}
}
public
static
class
BuildHelper
{
private
const
string
relativeDirPrefix
=
"../Release"
;
public
static
string
BuildFolder
=
"../Release/{0}/StreamingAssets/"
;
[
MenuItem
(
"Tools/web资源服务器"
)]
public
static
void
OpenFileServer
()
{
ProcessHelper
.
Run
(
"dotnet"
,
"FileServer.dll"
,
"../FileServer/"
);
}
public
static
void
Build
(
PlatformType
type
,
BuildAssetBundleOptions
buildAssetBundleOptions
,
BuildOptions
buildOptions
,
bool
isBuildExe
,
bool
isContainAB
,
bool
clearFolder
)
{
BuildTarget
buildTarget
=
BuildTarget
.
StandaloneWindows
;
string
exeName
=
"ET"
;
switch
(
type
)
{
case
PlatformType
.
PC
:
buildTarget
=
BuildTarget
.
StandaloneWindows64
;
exeName
+=
".exe"
;
break
;
case
PlatformType
.
Android
:
buildTarget
=
BuildTarget
.
Android
;
exeName
+=
".apk"
;
break
;
case
PlatformType
.
IOS
:
buildTarget
=
BuildTarget
.
iOS
;
break
;
case
PlatformType
.
MacOS
:
buildTarget
=
BuildTarget
.
StandaloneOSX
;
break
;
}
string
fold
=
string
.
Format
(
BuildFolder
,
type
);
if
(
clearFolder
&&
Directory
.
Exists
(
fold
))
{
Directory
.
Delete
(
fold
,
true
);
Directory
.
CreateDirectory
(
fold
);
}
else
{
Directory
.
CreateDirectory
(
fold
);
}
Log
.
Info
(
"开始资源打包"
);
BuildPipeline
.
BuildAssetBundles
(
fold
,
buildAssetBundleOptions
,
buildTarget
);
GenerateVersionInfo
(
fold
);
Log
.
Info
(
"完成资源打包"
);
if
(
isContainAB
)
{
FileHelper
.
CleanDirectory
(
"Assets/StreamingAssets/"
);
FileHelper
.
CopyDirectory
(
fold
,
"Assets/StreamingAssets/"
);
}
if
(
isBuildExe
)
{
AssetDatabase
.
Refresh
();
string
[]
levels
=
{
"Assets/Scenes/Init.unity"
,
};
Log
.
Info
(
"开始EXE打包"
);
BuildPipeline
.
BuildPlayer
(
levels
,
$"
{
relativeDirPrefix
}
/
{
exeName
}
"
,
buildTarget
,
buildOptions
);
Log
.
Info
(
"完成exe打包"
);
}
}
private
static
void
GenerateVersionInfo
(
string
dir
)
{
VersionConfig
versionProto
=
new
VersionConfig
();
GenerateVersionProto
(
dir
,
versionProto
,
""
);
using
(
FileStream
fileStream
=
new
FileStream
(
$"
{
dir
}
/Version.txt"
,
FileMode
.
Create
))
{
byte
[]
bytes
=
JsonHelper
.
ToJson
(
versionProto
).
ToByteArray
();
fileStream
.
Write
(
bytes
,
0
,
bytes
.
Length
);
}
}
private
static
void
GenerateVersionProto
(
string
dir
,
VersionConfig
versionProto
,
string
relativePath
)
{
foreach
(
string
file
in
Directory
.
GetFiles
(
dir
))
{
string
md5
=
MD5Helper
.
FileMD5
(
file
);
FileInfo
fi
=
new
FileInfo
(
file
);
long
size
=
fi
.
Length
;
string
filePath
=
relativePath
==
""
?
fi
.
Name
:
$"
{
relativePath
}
/
{
fi
.
Name
}
"
;
versionProto
.
FileInfoDict
.
Add
(
filePath
,
new
FileVersionInfo
{
File
=
filePath
,
MD5
=
md5
,
Size
=
size
,
});
}
foreach
(
string
directory
in
Directory
.
GetDirectories
(
dir
))
{
DirectoryInfo
dinfo
=
new
DirectoryInfo
(
directory
);
string
rel
=
relativePath
==
""
?
dinfo
.
Name
:
$"
{
relativePath
}
/
{
dinfo
.
Name
}
"
;
GenerateVersionProto
(
$"
{
dir
}
/
{
dinfo
.
Name
}
"
,
versionProto
,
rel
);
}
}
}
}
Unity/Assets/Editor/BuildEditor/ETBuildSettings.asset
0 → 100644
浏览文件 @
a9b44b68
%YAML
1.1
%TAG
!u!
tag:unity3d.com,2011:
---
!u!114
&11400000
MonoBehaviour
:
m_ObjectHideFlags
:
0
m_CorrespondingSourceObject
:
{
fileID
:
0
}
m_PrefabInstance
:
{
fileID
:
0
}
m_PrefabAsset
:
{
fileID
:
0
}
m_GameObject
:
{
fileID
:
0
}
m_Enabled
:
1
m_EditorHideFlags
:
1
m_Script
:
{
fileID
:
11500000
,
guid
:
b216745cd6e9bc94da5bdf9fe8aae6d1
,
type
:
3
}
m_Name
:
ETBuildSettings
m_EditorClassIdentifier
:
clearFolder
:
0
isBuildExe
:
0
isContainAB
:
0
buildType
:
1
buildAssetBundleOptions
:
0
Unity/Assets/Editor/BuildEditor/ETBuildSettings.asset.meta
0 → 100644
浏览文件 @
a9b44b68
fileFormatVersion: 2
guid: 8a464fff3e6f5a546bb453ecf8cad8ec
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 0
userData:
assetBundleName:
assetBundleVariant:
Unity/Assets/Editor/BuildEditor/ETBuildSettings.cs
0 → 100644
浏览文件 @
a9b44b68
using
UnityEditor
;
using
UnityEngine
;
namespace
ET
{
public
class
ETBuildSettings
:
ScriptableObject
{
public
bool
clearFolder
=
false
;
public
bool
isBuildExe
=
false
;
public
bool
isContainAB
=
false
;
public
BuildType
buildType
=
BuildType
.
Release
;
public
BuildAssetBundleOptions
buildAssetBundleOptions
=
BuildAssetBundleOptions
.
None
;
}
}
Unity/Assets/Editor/BuildEditor/ETBuildSettings.cs.meta
0 → 100644
浏览文件 @
a9b44b68
fileFormatVersion: 2
guid: b216745cd6e9bc94da5bdf9fe8aae6d1
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录