1.创建一个空的Prefab,命名Cube,然后创建一个Cube,将其拉到刚创建好的Prefab
2.新建一个脚本ExportAssetBundles.cs(代码来自官方文档),保存在Asset/Editor目录下
//在Unity编辑器中添加菜单
[MenuItem("Assets/Build AssetBundle From Selection")]
static void ExportResourceRGB2()
{
// 打开保存面板,获得用户选择的路径
string path = EditorUtility.SaveFilePanel("Save Resource", "", "New Resource", "assetbundle")
if (path.Length != 0)
{
// 选择的要保存的对象
Object[] selection = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets)
//打包
BuildPipeline.BuildAssetBundle(Selection.activeObject, selection, path, BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets, BuildTarget.StandaloneWindows)
}
}
这时我们将看到Asset下面出现Build AssetBundle From Selection和Build Scene
3.选中预设Cube,运行Build AssetBundle From Selection。这时会弹出一个保存框,将其命名为cube.unity3d(这里为了测试方便,放在c盘。实际项目中,我们是需要将他们放在web服务器,供所有客户端下载更新)
4.新建一个场景scene1.unity,上面放置几个模型,然后保存
5.选中该场景,在之前的ExportAssetBundles.cs脚本中添加打包场景的函数,运行Assets->Build Scene,保存为scene1.unity3d(这里为了测试方便,也放在c盘)
[MenuItem("Assets/Save Scene")]
static void ExportScene()
{
// 打开保存面板,获得用户选择的路径
string path = EditorUtility.SaveFilePanel("Save Resource", "", "New Resource", "unity3d")
if (path.Length != 0)
{
// 选择的要保存的对象
Object[] selection = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets)
string[] scenes = {"Assets/scene1.unity"}
//打包
BuildPipeline.BuildPlayer(scenes,path,BuildTarget.StandaloneWindows,BuildOptions.BuildAdditionalStreamedScenes)
}
}
注意事项
a.AssetBundle的保存后缀名可以是assetbundle或者unity3d
b.BuildAssetBundle要根据不同的平台单独打包,BuildTarget参数指定平台,如果不指定,默认的webplayer
遇到的问题是这样:有一台通用的构建服务器,自动打包脚本已经写好,本地测试通过,需要在这台构建服务器上通过Jenkins调用这个自动打包脚本,完成持续化集成的工作。但是在构建过程中报了如下错误:/usr/bin/codesign --force --sign 5F99020C8E18342FDC41502FACD430C23B975430 --entitlements /Users/wsbg/Library/Developer/Xcode/DerivedData/WesaiPoker-doyqrrerzicjnzekyyrdbzcmjhju/Build/Intermediates/ArchiveIntermediates/WesaiPoker/IntermediateBuildFilesPath/WesaiPoker.build/Release-iphoneos/WesaiPoker.build/WesaiPoker.app.xcent --timestamp=none /Users/wsbg/Library/Developer/Xcode/DerivedData/WesaiPoker-doyqrrerzicjnzekyyrdbzcmjhju/Build/Intermediates/ArchiveIntermediates/WesaiPoker/InstallationBuildProductsLocation/Applications/WesaiPoker.app/Users/wsbg/Library/Developer/Xcode/DerivedData/WesaiPoker-doyqrrerzicjnzekyyrdbzcmjhju/Build/Intermediates/ArchiveIntermediates/WesaiPoker/InstallationBuildProductsLocation/Applications/WesaiPoker.app: unknown error -1=ffffffffffffffffCommand /usr/bin/codesign failed with exit code 1 ** ARCHIVE FAILED **
问题排查
排查1:直接登录进入远程的构建机,手动运行打包脚本是没有问题的,这说明脚本本身是没有问题的。看了上面的输出错误日志,应该是签名问题
排查2:通过ssh的方式登录远程的构建机,运行打包脚本报同样的错误,说明如果通过ssh方式解决了,那Jenkins应该也可以
排查3:在Google上搜索了Command /usr/bin/codesign failed with exit code 1 附带ssh 关键词,发现很多人也遇到了这个问题。同样的持续集成工具fastlane有很多相似的[ Issue ]。大致的原理是因为codesign命令需要进行签名的时候,会访问keychain来获取打包脚本中对应的证书。通过ssh这种方式访问的时候,是没有访问权限的。
排查4:按照网友们的做法,添加命令 security unlock-keychain -p password /Users/username/Library/Keychains/Login.keychain
. 其中password是你登录当前机器账户的密码,username是当前账户的名称。在最新的Mac Sierra中在Keychains下面是没有Login.keychain的,新的名字被改成了Login.keychain-db.所以需要做一个软连接 ln -s ~/Library/Keychains/login.keychain-db ~/Library/Keychains/login.keychain
然后先执行上面的命令,然后执行打包脚本,就可以远程打包了
补充: 由于这个解锁并不是永久的,所以每次在执行打包脚本时,必须先执行解锁命令后执行打包脚本。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)