Unity打包资源,进行后台加载
Unity打包资源,进行后台加载
需要项目优化的pa you,这边走:Unity项目优化——Web版
一、前言
因为在下载Three.js,所以趁着这个时间写一下资源打包加载吧
小黑在刚开始学习Unity的时候,一是通过教课老师上课讲的知识,二是在网上看一些教程,但里面总会提到,打成AB包。刚开始很好奇,这个AB包到底是什么东东!!!
直到我上班之后,才明白了解了,原来AB包又称为AssetBundle包,就是把一些资源放到后台去加载,但是具体流程是什么呢?这就是小黑今天要带给大家的知识咯。
二、正篇
如何打AB包,分为以下几步
一:把我们的模型拿到
在Unity的Porject中选择你所要打AB包的模型,在Inspector最下面会有模型视图小窗口,当模型还没被动手脚的时候是这样子:

动手后它变为下图所示:

二:模型部分已准备就绪了,接下来就是去打成AB包
1:在Unity中创建特殊文件夹:StreamingAssets
2:导入我们的脚本:PackagingAssetBundle.cs到Editor中
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using System.IO;
public class PackagingAssetBundle : MonoBehaviour
{
[MenuItem("AssetBundle/Packaging")]
private static void PackageBuddle()
{
Debug.Log("Please wait while packing the asset package.....");
string packagePath = Application.dataPath+ "/StreamingAssets";
if (packagePath.Length <= 0 || !Directory.Exists(packagePath))
return;
Debug.Log("Output Path: " + packagePath);
BuildPipeline.BuildAssetBundles(packagePath,BuildAssetBundleOptions.None,BuildTarget.WebGL);
AssetDatabase.Refresh();
}
}
3:在编辑器上边点击AssetBundle\Packaging
1:
2:点击之后会出现
3:看下图,粉色框是打包时的提示,红色框是打包完成后的路径提示;

4:看StreamingAssets文件夹下:有两个文件

到现在,我们的AB包就算打出来了。可它怎么用呢,别着急,接下来就是去使用了;
三、动态加载
1:打开StreamingAssets文件夹

2:我们看到下图,把最大的这个 .unity3d文件给到公司后台,让他和你对接口,给你文档。
3:编写我们自己接收文件的的代码
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
using LitJson;
using UnityEngine.Networking; //这个一定不能忘记
public class CS_Test : MonoBehaviour
{
void Start(){}
/// <summary> 用来存放模型在后台的路径 </summary>
public static List<string> LuJing = new List<string>();
/// <summary>
/// 与PHP后台做交互,取想到的模型,图片或者其他
/// </summary>
/// <param name="URL">获取访问模型路径,的一个路径</param>
/// <param name="requestDic">字典,key为:所要加载东西的标签或者什么的;value为:后台分辨的结果</param>
/// <param name="callBack">回调函数,可以为null</param>
/// <returns></returns>
public static IEnumerator OnGetInfo(string URL ,Dictionary<string, string> requestDic,Action<string> callBack)
{
//表单
WWWForm form = new WWWForm();
WWW www;
if (requestDic != null)
{
foreach (var item in requestDic)
form.AddField(item.Key, item.Value);
}
else
form.AddField("测试是否接通","1");
www = new WWW(URL, form);
yield return www;
if (www.error != null)
Debug.LogError("php请求错误,请检查出你的错误:" + www.error);
else
{
if (www.isDone && callBack != null)
callBack(www.text);
}
}
public static IEnumerator ABsCreatGameObject()
{
foreach (var item in LuJing)
{
WWW w = new WWW(item);
yield return w;
if (w.isDone)
{
GameObject[] objs = w.assetBundle.LoadAllAssets<GameObject>();
foreach (var isitem in objs)
{
GameObject go = Instantiate(isitem);
}
}
}
}
}
到这里,我们与后台交互的代码基本写完了。接下来我们需要去调用它。
4:调用我们的交互代码与后台要模型
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LitJson;
public class CreateModel_ : MonoBehaviour {
private Dictionary<string, string> dic_CreateModel = new Dictionary<string, string>();
void Start ()
{
dic_CreateModel.Add("code或者和你们后台对接口", "给后台去对接口");
}
private bool isCreateBool = true;
void OnEnable()
{
if (isCreateBool)
{
StartCoroutine(CS_Test.OnGetInfo(ToPHPData.DownURL,dic_CreateModel, (string s) =>
{
JsonData data = JsonMapper.ToObject(s);
CS_Test.LuJing.Clear();
for (int i = 0; i < 5; i++)
CS_Test.LuJing.Add(ToPHPData.DownURL + data["data"][i]["model"].ToString());
if (CS_Test.LuJing.Count != 0)
StartCoroutine(CS_Test.ABsCreatGameObject());
}));
}
}
}
/*
* ok,当我们的该脚本每被激活一次,就会向后台要一次模型并且加载出来,可根据你需要的改写
*/
5:看结果去咯~
1:我们刚运行程序,所以我们的小无人机还没有出现,等1s不到~
2:1s不到的时间,我们的无人机出现了,并且出现在我们的层级面板


不过有一点大家要注意,就是我们的模型通过后台加载进来之后,名字后方都有 (Clone) 的字样,在使用模型的时候,肯定要查找,不能把这个忘了
于是乎,我们与后台交互拿模型,数据什么的就大功告成啦!
我们与后台交互拿模型,数据什么的就大功告成啦!
大功告成啦!
成啦!
记得点赞哟!也可以转发给需要的伙伴们
程序的道路上学习永不停止,探索随时进行。
Let’s go. Just do it. We can.
Unity打包资源,进行后台加载的更多相关文章
- 【Cocos2d-Js基础教学(5)资源打包工具的使用及资源的异步加载处理】
TexturePacker是纹理资源打包工具,支持Cocos2dx的游戏资源打包. 如果用过的同学可以直接看下面的资源的异步加载处理 首先为什么用TexturePacker? 1,节省图片资源实际大小 ...
- UNITY_资源路径与加载外部文件
UNITY_资源路径与加载外部文件 https://www.tuicool.com/articles/qMNnmm6https://blog.csdn.net/appppppen/article/de ...
- 高效使用Bitmaps(二) 后台加载Bitmap
转载:http://my.oschina.net/rengwuxian/blog/183802 为什么要在后台加载Bitmap? 有没有过这种体验:你在Android手机上打开了一个带有含图片的Lis ...
- Unity3d Web3d资源的动态加载
Unity3d Web3d资源的动态加载 @灰太龙 参考了宣雨松的博客,原文出处http://www.xuanyusong.com/archives/2405,如果涉及到侵权,请通知我! Unity3 ...
- Unity+NGUI打造网络图片异步加载和本地缓存工具(一)
我们已经开发了在移动终端中,异步网络图片被装入多,在unity其中尽管AssetBundle存在,通常第一个好游戏的资源,然后加载到现场,但也有很多地方可以使用异步网络加载图像以及其缓存机制. 我也写 ...
- Webpack 常见静态资源处理 - 模块加载器(Loaders)+ExtractTextPlugin插件
Webpack 常见静态资源处理 - 模块加载器(Loaders)+ExtractTextPlugin插件 webpack系列目录 webpack 系列 一:模块系统的演进 webpack 系列 二: ...
- 【UE4 C++ 基础知识】<11>资源的同步加载与异步加载
同步加载 同步加载会造成进程阻塞. FObjectFinder / FClassFinder 在构造函数加载 ConstructorHelpers::FObjectFinder Constructor ...
- 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件
[源码下载] 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件 作者 ...
- HTML页面处理以及资源文件的加载
Javascript 异步加载详解 这篇文章很详细的介绍了HTML的页面处理以及资源文件的加载. 本文总结一下浏览器在 javascript 的加载方式. 关键词:异步加载(async loading ...
- thinkphp 的两种建构模式 第一种一个单入口里面定义两个模块,前台和后台,函数控制模块必须function.php前台加载前台模块的汉书配置文件,后台加载后台模块的汉书配置文件,公共文件共用。第二种架构模式两个单入口文件,分别生成两个应用定义define。。。函数可以定义配置文件。。。。
thinkphp 的两种建构模式 第一种一个单入口里面定义两个模块,前台和后台,函数控制模块必须function.php前台加载前台模块的汉书配置文件,后台加载后台模块的汉书配置文件,公共文件共用. ...
随机推荐
- Android开发 对接微信分享SDK总结
原文:Android开发 对接微信分享SDK总结 - Stars-One的杂货小窝 公司项目需要对接微信分享,本来之前准备对接友盟分享的,但友盟的分享实际参数太多,而我又只需要对接一个微信分享,于是便 ...
- jvm双亲委派机制详解
双亲委派机制 记录一下JVM的双亲委派机制学习记录. 类加载器种类 当我们运行某一个java类的main方法时,首先需要由java虚拟机的类加载器将我们要执行的main方法所在的class文件 ...
- 禁止eslint对指定代码检测
有时候我们引入外部文件的API时,eslint无法识别,编译的时候就会出现warn eslint是可以禁用对指定代码的检测: 单行注释 let map = new BMap.Map('map') // ...
- 硬核剖析Java锁底层AQS源码,深入理解底层架构设计
我们常见的并发锁ReentrantLock.CountDownLatch.Semaphore.CyclicBarrier都是基于AQS实现的,所以说不懂AQS实现原理的,就不能说了解Java锁. 上篇 ...
- 优秀的Kafka GUI客户端、可视化管理工具、监控工具
想要查看Topic里的消息却找不到软件,想要查看或更新Broker.Topic配置,想要监控Broker服务器状态?试试下面的Kafka GUI工具--Kafka Assistant 官网地址:htt ...
- Enum.Parse的使用
Enum的转换,用Enum.Parse() Enum.Parse()方法.这个方法带3个参数,第一个参数是要使用的枚举类型.其语法是关键字typeof后跟放在括号中的枚举类名.第二个参数是要转换的字符 ...
- 面试 个人摸底监测 考察JavaScript基础 (第三天)
01,如何开启JS严格模式?JS严格模式有什么特点? 两种方式 全局开启在js开头加上 'use strict' 局部开启,在作用域开头加上 function fn(){ 'use strict' } ...
- 新版的Eureka已经移除了基于Ribbon的客户端的负载均衡
启用一个EurekaServer和一个服务调用方,两个copy的服务提供方. 本次测试用Springcloud 2021.0.1版本 客户端使用RestTemplate 的负载均衡 @LoadBala ...
- 关于linux建立u盘legacy启动方式引导
前言 我一直在用linux,但是我在linux制作pe启动盘无法实现,windows有很多制作pe启动盘的软件,如大白菜,u深度什么的,但是linux没有对应的软件,所以我想写一个类似的工具,那么就有 ...
- 数电第8周周结_by_yc
基本知识: 1.有限状态机的分类: Moore型:输出仅与电路的状态有关: Mealy型:输出与当前电路状态和当前电路输入有关. 2.有限状态机的描述方法: 状态转换图:节点:状态(Moore输出): ...