如何使用AssetBundle打包脚本文件

如何使用AssetBundle打包脚本文件,第1张

打包AssetBundle的方法:

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

然后先执行上面的命令,然后执行打包脚本,就可以远程打包了

补充: 由于这个解锁并不是永久的,所以每次在执行打包脚本时,必须先执行解锁命令后执行打包脚本。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/608919.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-07-12
下一篇2023-07-12

发表评论

登录后才能评论

评论列表(0条)

    保存