Unity打包同一文件Hash不一样

用Unity3D做游戏开发,基本都会涉及到资源版本管理及更新,下面是做的过程中遇到的一小问题,记录一下以供参考。

而常用于标记资源版本的方法有计算文件Hash、VCS的版本等,进行文件Hash计算时发现同一个资源文件每次打包成AssetBundle后Hash都不一样,这不科学啊,这样基本是废了用Hash作版本标记的方法。

查了查资料,发现AssetBuildPipeline.BuildAssetBundle接口options参数,可以增加一项BuildAssetBundleOptions.DeterministicAssetBundle。这将保证AssetBundle使用唯一Hash进行标识,若不加这个参数AssetBundle每次构建时都生成不同ID

下现贴一个我简单打包脚本:

[MenuItem("Tools/打包 setting_client")]
public static void BuildWd_SettingClient()
{
    var setting_client = AssetDatabase.LoadAssetAtPath("Assets\\setting_client.bytes", typeof(Object));
    //NOTE 这个路径写死先
    var savePath = @"e:\xxx_online\data\setting_client.ab";
    if (setting_client != null)
    {
        BuildPipeline.BuildAssetBundle(setting_client, null, savePath,
            BuildAssetBundleOptions.UncompressedAssetBundle | BuildAssetBundleOptions.CompleteAssets |BuildAssetBundleOptions.DeterministicAssetBundle,
            BuildTarget.StandaloneWindows);
        Debug.Log("打包成功,文件在:" + savePath);
    }
    else
    {
        Debug.LogError("请检查,找不到 setting_client.bytes ");
    }
}

部分内容转载自:http://blog.dou.li/Unity3D-AssetBundle-Build-Hash-No-Same.html

时间: 2024-11-06 09:42:03

Unity打包同一文件Hash不一样的相关文章

unity 打包AssetBundle

unity提供了assetbunlde机制,下面介绍一种方法将指定目录下的所有文件打包成AssetBundle 先说明步骤,再上代码. 步骤一.选择要打包成assetbundle的目录,本案例使用assetbundle_raw 步骤二.把要打包的资源或者目录都放到assetbundle_raw目录,资源可以是 prefab,png,fbx,font,audio,txt等. 步骤三.给assetbundle_raw目录下所有的资源文件设置assetbundle名称,如果是目录,会递归. 名称格式:

unity 打包 windows 运行 紫色 粉红色

unity下建立了个小demo,在editer里面运行正常.如下 但是一旦打包发布到android或者windows下就出现了类似这种情况 这种一般是由于材质贴图的缺失,一般来说选定的默认贴图的话会打包到文件中的.如果出现这种情况,可以尝试代码动态加载一个材质球.如下 Material materialWall = Resources.Load("Materials\\materialWall") as Material; wallTemp.GetComponent<Render

Unity3D游戏开发之Unity打包APK

Unity3D游戏开发之Unity打包APK 1.安装JDK 2.配置JDK 3.在Paht的变量值后面加分号,把D:\android\adt-bundle-windows-x86-20131030\sdk\tools放在Path后面.[狗刨学习网] 4.点击菜单栏中的Edit-->Preferences 看Android SDK Location这个选项 浏览你的模拟器路径. 5.点击 File-Build Settings 然后再 点击Add Current 添加你的场景.再 点击Switc

Unity打包ipa图文教程

首先保证项目在Unity上运行正常,有时候电脑上运行成功也不代表手机上能运行成功,总之会出现各种问题,还是需要丰富的经验. 简单来说,步骤如下:Unity打包IOS---生成XCode项目---配置开发者账号---安装开发者证书(如果发布的话需要发布证书)---XCode在真机上运行---生成ipa 在unity Build Settings里面选择平台为Platform为ios,再在Player Setting中配置一下,如果你打包过安卓,对此应该就很熟悉了,配置基本差不多,需要注意的一点就是

实力封装:Unity打包AssetBundle(二)

→前情提要:Unity最基本的AssetBundle打包方式. 第二种打包方式 Unity提供的BuildAssetBundles API还有一个重载形式,看下面↓↓ public static AssetBundleManifest BuildAssetBundles(string outputPath, AssetBundleBuild[] builds, BuildAssetBundleOptions assetBundleOptions, BuildTarget targetPlatfo

browserify 不打包某些文件或者把公共文件提取出来教程

var gulp = require('gulp') var fs = require("fs") var babelify = require('babelify') var browserify = require('browserify') var rename = require('gulp-rename') var uglifyjs = require('gulp-uglifyjs') var vendors = ['react','react-dom','jquery'];

Eclipse将android项目打包jar文件

Eclipse+android打包jar文件 蔡建良 2016-3-12 以Android-SlideExpandableListView开源框架为例,将源码Library打包成jar文件并包含R.class. 开发环境: 1) Eclipse IDE for Java Developers Version: Mars.2 Release (4.5.2) 2) Android插件: ADT-23.0.4 将源码导入: 设置项目为Library: 将项目导出为jar文件: 将生成的main.jar

Python 文件Hash(MD5,SHA1)

import hashlib import os,sys   def CalcSha1(filepath):     with open(filepath,'rb') as f:         sha1obj = hashlib.sha1()         sha1obj.update(f.read())         hash = sha1obj.hexdigest()         print(hash)         return hash   def CalcMD5(filep

关于在打包Jar文件时遇到的资源路径问题(二)

在关于<关于在打包Jar文件时遇到的资源路径问题(一)>中,以及描述了当资源与可执行JAr分离时的资源路径代码的编写问题,后来想了想,为什么将<Java核心技术卷一>中的程序10-1即ResourceTest的Jar文件放在任何地方都可以执行呢? 图:将原本一起放入目录中的Jar放到桌面上,点击依然能执行 于是我将这个Jar包进行解压,发现在这个包中依然有资源,这就说明了这个包在脱离了原先目录而执行时,依据的资源路径应该是在自己的Jar包中.(至于这个Jar在原先目录时是根据自己包