怎么使用Unity5.x打包与发布unity3d android 打包游戏

程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity3D研究院之提取游戏资源的三个工具支持Unity5(八十四)
Unity3D研究院之提取游戏资源的三个工具支持Unity5(八十四)
围观92094次
编辑日期: 字体:
这两天无意间又发现了两个提取Unity游戏资源的工具,这会儿刚好有时间我就码点字总结一下。
一、disunity
因为之前写过了所以这里就不介绍了 。Unity3D研究院之mac上从.ipa中提取unity3D游戏资源(六十六)
二、UnityAssetsExplorer
下载地址:
百度云下载地址:
如果你想解Unity5的游戏包,请使用 UnityAssetsExplorer 1.5 以上版本。
百度云下载地址:
如下图所示,OpenAssets-File 选一个 .asset 或者一个.assetbundle 然后Extract All即可导出,感觉只是在disunity上增加了一个可视化的功能。
三、UnityStudio
其实我觉得这个工具非常牛逼、前面两个都只能把资源解开,预览图片资源得用别的工具才能打开。然而UnityStudio可以直接在自己的软件上查看图片、shader、文本、还能直接播放音频、甚至还能看场景Hierarchy视图的树状结构。强烈推荐用UnityStudio啊。
下载地址:
百度云下载地址:
UnityStudio最新版本下载 支持unity5.x
直接预览图片
直接播放音频
查看场景树状结构
查看Shader代码。
查看文本内容
如果你想解Unity5的游戏包,请使用 UnityAssetsExplorer 1.5 以上版本。
百度云下载地址:
因为Unity提供资源的工具很多,所有有些团队为了避免别人提取所以对资源进行了加密,最近又发现了一个神器基于硬件层面查看内存贴图,这样就直接无视对方加密了。。
下载地址在这里
下载Tegra Graphics Debugger
支持Mac Linux Windows
安装好以后连上安卓机器, 这里安卓的机器得是Tegra 机型查询
然后要选一个abd的路径,在android的sdk里platform-tools/adb
接着选择一个游戏包名,Lanch一下就会自动启动游戏,并且开始分析。
点击Capture Frame 截取一帧,然后选择Texture就可以看内存了, 给力吧。。
如果没有Tegra的手机,用高通的也可以,高通这个给力可以批量导出所有图片
下载地址:
参考资料: 
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!Unity5新的AssetBundle系统使用心得
& & & & Unity的AssetBundle系统是对资源管理的一个扩展,动态更新,网页游戏,资源下载都是基于AssetBundle系统的。但是不得不说,这个系统非常恶心,坑很深。至于有多深,请看这篇文章:&
& & & & 原先的AssetBundle系统需要自己写一大坨导出的代码(BuildPipeline),这个新手会无从下手,老手也经常会被坑到。想正确处理好资源的依赖关系从而保证资源完整而又不会产生重复资源,确实不是一件非常容易的事情。 & & &&
& & & & Unity5新的AssetBundle系统大大简化了这一操作。Unity打包的时候会自动处理依赖关系,并生成一个.manifest文件,这个文件描述了assetbundle包大小、crc验证、包之间的依赖关系等等,是一个文本文件。
加载资源的时候Unity会自动处理好其依赖包的加载
。(参见最后的补充,Unity并没有如此智能,新的assetbundle简化很多,但是也有一些新的坑)
& & & & 打包代码简化为一个函数(其实也没什么必要了,因为流程固定了,做成内嵌的菜单选项也没什么影响)
BuildPipeline.BuildAssetBundles(outputPath);
& & & &执行这个函数,它会自动打包工程目录下的所有的assetbundle,函数足够智能,它只会打包有修改的资源。
& & & &如何添加一个AssetBundle呢?
& & & &很简单,在资源属性窗口底部有一个选项,这个地方设置AssetBundle的名字。它会修改资源对应的.meta文件,记录这个名字。 AssetBundle的名字固定为小写。另外,每个AssetBundle都可以设置一个Variant,其实就是一个后缀,实际AssetBundle的名字会添加这个后缀。如果有不同分辨率的同名资源,可以使用这个来做区分。
& & & 我手头的模型资源非常多,所以我又写了个脚本自动遍历prefab的meta文件,添加AssetBundle名字。有一个需要注意的地方就是.meta文件貌似权限问题,无法直接写入,需要删除原文件,然后使用新的文件替换。。
# -*- coding: utf-8 -*-
import os, sys,
EXT_LIST = ['.prefab.meta', '.png.meta', '.jpg.meta'];
def doWork(path):
for root, dirs, files in os.walk(path):
for file in files:
for ext in EXT_LIST:
if file.endswith(ext):
fullPath = os.path.join(root, file)
fullPath = fullPath.replace('\\', '/')
prefabName = fullPath.replace(path, '');
prefabName = prefabName[:prefabName.find('.')] + '.data';
fileData = [];
fp = open(fullPath, 'r');
for line in fp:
if line.find('assetBundleName:') != -1:
fileData.append('
assetBundleName: ' + prefabName.lower() + '\n');
fileData.append(line);
fp.close();
# os.remove(fullPath);
fpw = open(fullPath + '.tmp', 'w');
fpw.writelines(fileData);
fpw.close();
os.remove(fullPath)
shutil.copy(fullPath + '.tmp', fullPath);
os.remove(fullPath + '.tmp')
doWork(r'Assets/Resources/Prefab/')
os.system('PAUSE')
c#编辑器扩展(与python代码功能一样,喜欢哪个用哪个)
public class ExportAssetBundles : Editor
// 设置assetbundle的名字(修改meta文件)
[MenuItem(&Tools/SetAssetBundleName&)]
static void OnSetAssetBundleName()
UnityEngine.Object obj = Selection.activeO
string path = AssetDatabase.GetAssetPath(Selection.activeObject);
string[] extList = new string[] { &.prefab.meta&, &.png.meta&, &.jpg.meta& , &.tga.meta& };
EditorUtil.Walk(path, extList, DoSetAssetBundleName);
//刷新编辑器
AssetDatabase.Refresh();
Debug.Log(&AssetBundleName修改完毕&);
static void DoSetAssetBundleName(string path)
path = path.Replace(&\\&, &/&);
int index = path.IndexOf(EditorConfig.PREFAB_PATH);
string relativePath = path.Substring(path.IndexOf(EditorConfig.PREFAB_PATH) + EditorConfig.PREFAB_PATH.Length);
string prefabName = relativePath.Substring(0, relativePath.IndexOf('.')) + EditorConfig.ASSETBUNDLE;
StreamReader fs = new StreamReader(path);
List&string& ret = new List&string&();
while((line = fs.ReadLine()) != null) {
line = line.Replace(&\n&, &&);
if (line.IndexOf(&assetBundleName:&) != -1) {
assetBundleName: & + prefabName.ToLower();
ret.Add(line);
fs.Close();
File.Delete(path);
StreamWriter writer = new StreamWriter(path + &.tmp&);
foreach (var each in ret) {
writer.WriteLine(each);
writer.Close();
File.Copy(path + &.tmp&, path);
File.Delete(path + &.tmp&);
[MenuItem(&Tools/CreateAssetBundle&)]
static void OnCreateAssetBundle()
BuildPipeline.BuildAssetBundles(EditorConfig.OUTPUT_PATH);
//刷新编辑器
AssetDatabase.Refresh();
Debug.Log(&AssetBundle打包完毕&);
& & & & 之前我简单的认为Unity既然已经做了资源依赖链,那么加载资源的时候理所应当的会自动处理好依赖关系。结果是我想的太简单了。我们必须自己手动加载依赖的assetbundle。
& & & & 我们直接调用打包函数,在打包目录会生成一个与打包目录同名的文件,比如我们打包到AssetsBundle/windows目录下,则此目录下会生成一个windows文件,以及一个windows.manifest文件。
& & & & 这个windows文件就包含了当前assetbundle的列表和依赖关系。我们需要在游戏开始的时候手动加载这个assetbundle(即windows),获取一个AssetBundleManifest对象。这个对象有GetAllAsssetBundles()函数还有一个GetAllDependencies函数。
& & & & 我们可以使用GetAllDependencies传入一个assetbundle的名字来获取其依赖的assetbundle,然后分别加载这些assetbundle。注意传入的文件名是我们生成assetbundle设置的名字,而不是全路径。可以参考windows.manifest文件查看assetbundle名字形式。
& & & & 新的问题:
& & & &由于我的资源量比较大,所以我拆分了多个生成工程。而生成assetbundle的时候指向的是一个路径,最终合并后就是一个完整的游戏资源包。我们在游戏运行加载资源的时候需要windows这个manifest文件,而它又是Unity自己生成的,并且只保存了当前项目生成的assetbundle信息,无法自动合并。从这点来说它无法满足我的需求。
& & & &我们之所以需要这个manifest文件,是因为我们要从中获取依赖关系。所以我在项目中自己维护资源列表。它可以根据生成的manifest自动生成、合并资源列表(一个json格式的文本文件)。我们在游戏开始时解析这个json文件获取到资源列表。这个资源列表同时也可以作为自动更新的文件列表。
& & & 实现方式很简单,assetbundle打包完毕后,加载manifest文件(注意这里有个坑,我会在另一篇文章里面讲解如何在Editor下加载AssetBundle),获取所有资源信息,与当前已存在的资源列表进行比对,合并。多个项目之间只要维护好一份统一的资源列表就可以了。
本分类共有文章48篇,更多信息详见
& 2012 - 2016 &
&All Rights Reserved. &
/*爱悠闲图+*/
var cpro_id = "u1888441";程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity3D研究院之5.x自带API打包xcode添加framework、plist
Unity3D研究院之5.x自带API打包xcode添加framework、plist
围观8962次
编辑日期: 字体:
之前项目一直在用 。今天无意间发现其实Unity已经帮我们实现了一套。如果你用的unity4.x开发,可以把它的代码放到你的工程里用。 如果你用的是unity5.x开发,那么unity已经将这个API内置了
本来想自己写个例子试试, 谷歌了一下发现已经有了。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
using UnityEngine;using UnityEditor;using UnityEditor.Callbacks;using UnityEditor.iOS.Xcode; // ←さっきいれたXcodeAPIusing System.Collections;using System.IO;&public class XcodeProjectMod : MonoBehaviour{&&&&&// ちょっとしたユーティリティ関数(http://goo.gl/fzYig8を参考)&&&&internal static void CopyAndReplaceDirectory(string srcPath, string dstPath)&&&&{&&&&&&&&if (Directory.Exists(dstPath))&&&&&&&&&&&&Directory.Delete(dstPath);&&&&&&&&if (File.Exists(dstPath))&&&&&&&&&&&&File.Delete(dstPath);&&&&&&&&&Directory.CreateDirectory(dstPath);&&&&&&&&&foreach (var file in Directory.GetFiles(srcPath))&&&&&&&&&&&&File.Copy(file, Path.Combine(dstPath, Path.GetFileName(file)));&&&&&&&&&foreach (var dir in Directory.GetDirectories(srcPath))&&&&&&&&&&&&CopyAndReplaceDirectory(dir, Path.Combine(dstPath, Path.GetFileName(dir)));&&&&}&&&&&[PostProcessBuild]&&&&public static void OnPostprocessBuild(BuildTarget buildTarget, string path)&&&&{&&&&&&&&if (buildTarget == BuildTarget.iPhone)&&&&&&&&{&&&&&&&&&&&&string projPath = PBXProject.GetPBXProjectPath(path);&&&&&&&&&&&&PBXProject proj = new PBXProject();&&&&&&&&&&&&&&&&&&&&&&&&proj.ReadFromString(File.ReadAllText(projPath));&&&&&&&&&&&&string target = proj.TargetGuidByName("Unity-iPhone");&&&&&&&&&&&&&// システムのフレームワークを追加&&&&&&&&&&&&proj.AddFrameworkToProject(target, "AssetsLibrary.framework", false);&&&&&&&&&&&&&&&&&&&&&&&&// 自前のフレームワークを追加&&&&&&&&&&&&CopyAndReplaceDirectory("Assets/Lib/mylib.framework", Path.Combine(path, "Frameworks/mylib.framework"));&&&&&&&&&&&&proj.AddFileToBuild(target, proj.AddFile("Frameworks/mylib.framework", "Frameworks/mylib.framework", PBXSourceTree.Source));&&&&&&&&&&&&&// ファイルを追加&&&&&&&&&&&&var fileName = "my_file.xml";&&&&&&&&&&&&var filePath = Path.Combine("Assets/Lib", fileName);&&&&&&&&&&&&File.Copy(filePath, Path.Combine(path, fileName));&&&&&&&&&&&&proj.AddFileToBuild(target, proj.AddFile(fileName, fileName, PBXSourceTree.Source));&&&&&&&&&&&&&// Yosemiteでipaが書き出せないエラーに対応するための設定&&&&&&&&&&&&proj.SetBuildProperty(target, "CODE_SIGN_RESOURCE_RULES_PATH", "$(SDKROOT)/ResourceRules.plist");&&&&&&&&&&&&&// フレームワークの検索パスを設定?追加&&&&&&&&&&&&proj.SetBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "$(inherited)");&&&&&&&&&&&&proj.AddBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "$(PROJECT_DIR)/Frameworks");&&&&&&&&&&&&&&&&&&&&&&&&// 書き出し&&&&&&&&&&&&File.WriteAllText(projPath, proj.WriteToString());&&&&&&&&}&&&&}}
欢迎大家试试哈~
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!

我要回帖

更多关于 unity5发布打包安卓 的文章

 

随机推荐