Unity iOS构建是否需要混淆处理

这次我们来一起看看该如何使用 AssetBundle

首先打开unity项目,鼠标点击一个Project下的一个文件然后看这里

ios unity 需要混淆么 unity build ios_3d

Project下的每一个文件下面都有一个AssetBundle,点击红色区域弹出New点击New会提示你输入AssetBundle的name,左边的红色区域就是这个资源被AssetBundle打包后的文件名字,右边的红色区域就是这个AssetBundle打包后的文件后缀,如上图我设置的,打包后文件为cube.unity3d,文件名和文件后缀可以随便取,下面我们来实际操作一下

首先在unity项目中创建Editor文件夹,创建一个脚本文件,复制如下代码到新建的脚本文件,然后将这个脚本文件放到Editor文件下面

登录后复制


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;

public class CreateAssetBundles {

    [MenuItem("Assets/Build AssetBundles")]
    static void BuildAllAssetBundles()
    {
        string dir = "AssetBundles";
        if (Directory.Exists(dir) == false)
        {
            Directory.CreateDirectory(dir);
        }
        BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
    }
}

ios unity 需要混淆么 unity build ios_3d_02

好了,接下来我们可以在unity中点击asset在弹出的子选项里找到Build AssetBundles

ios unity 需要混淆么 unity build ios_assetbundle_03

点击Build AssetBundles按钮后将会在项目路径下生成四个文件

ios unity 需要混淆么 unity build ios_System_04

这个cube.unity3d就是AssetBundle打包的资源压缩包啦,我们可以把这个放到服务器上,在需要的时候进行远程加载,使用代码如下

登录后复制


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class LoadFromFileExamle : MonoBehaviour {

	// Use this for initialization
	IEnumerator Start () {
        //UnityWebRequest取代www下载
        string uri = @"file:///F:\shengcun\AssetBundleDemo\AssetBundles\cube.unity3d";//AssetBundle资源路径这里可以填写服务器地址和该资源的完整路径
        UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(uri);
        yield return request.SendWebRequest();
        AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);//得到AssetBundle对象
        Object[] objs = ab.LoadAllAssets();//读取AssetBundle里面的所有资源
        foreach (Object o in objs)
        {
            Instantiate(o);//实例化对象 这里可以根据对象的类型进行转换在游戏中使用
        }

        AssetBundle manifestAB = AssetBundle.LoadFromFile("AssetBundles/AssetBundles");
        AssetBundleManifest manifest = manifestAB.LoadAsset<AssetBundleManifest>("AssetBundleManifest");//读取manifest文件
        string[] strs = manifest.GetAllDependencies("cube.unity3d");
        foreach (string name in strs)
        {
            Debug.Log(name);//打印cube.unity3d的依赖AssetBundle包 后续应该根据这个依赖包继续加载AssetBundle包 加载方法和上面相同
        }
    }
	
	// Update is called once per frame
	void Update () {
		
	}
}


上面看到了AssetBundle包有互相依赖的关系,什么意思呢,比如a包是个模型 b包是这个模型的材质 将a包和b包同时打包,那么a包将依赖于b包,在项目中使用的时候,需要加载的AssetBundle包除了本身外,还需要加载所有这个AssetBundle包的依赖包,那么让资源更合理化,这里建议将所有材质打包到一个AssetBundle包,所有贴图打包到一个AssetBundle包,然后其他的包会依赖这两个包,这是一种比较常见的AssetBundle打包策略,因为这样操作相当于让所有资源共用,避免资源重复造成AssetBundle变大。然后推荐一款AssetBundle打包管理工具AssetBundle-Browser,非常好用!

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空