AssetBundle动态加载外部资源

AssetBundle的加载方式有以下四种:

AssetBundle.LoadFromFile 从本地加载

AssetBundle.LoadFromMemory 从内存加载

WWW.LoadFromCacheOrDownload 加载后放在缓存备用

UnityWebRequest 从服务器加载。

本教程以UnityWebRequest 从服务器加载为例,适用于PC和WebGL运行,具体步骤如下:

1.配置WebGL本地运行环境。

参考主页《WebGL本地运行环境配置》教程。

2.把资源打成AssetBundle包。

参考主页《AssetBundle打包流程》教程,将资源后缀设为.unity3d。

3.将生成的AssetBundles文件夹放在WebGL包所在同级目录下。

4.编写AssetBundle加载资源脚本LoadBundles.cs,挂载到场景。

using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;

public class LoadBundles : MonoBehaviour
{
    string url = "http://196.168.66.251:8011/AssetBundles/";//(本地ip:步骤1中设置的端口号)
    AssetBundle assetBundle;

    void Start()
    {
         StartCoroutine(Load("pt101"));
    }
    IEnumerator Load(string name)
    {
        //从远程服务器上进行下载
        UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(url+ name+".unity3d");
        //等待文件下载完毕
        yield return request.SendWebRequest();

        if (!unityWebRequest.isDone)
        {
             Debug.Log("加载失败");
        }
        else
        { 
           //加载AssetBundle资源
           AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);
        
           //根据资源生成文件
           //1.图片资源
           //Sprite img = bundle.LoadAsset<Sprite>(name);
           //2.天空盒材质球资源
           //Material mat = bundle.LoadAsset<Material>(name);
           //mat.shader = Shader.Find(mat.shader.name);//加载天空盒材质球时必加,否则材质会丢失!
           //RenderSettings.skybox = mat;
           //3.模型资源
           GameObject go = Instantiate(bundle.LoadAsset<GameObject>(name));
        
           //初始化
           go.transform.position = new Vector3(0, 0, 0);
           //释放资源
           request.Dispose();
           Debug.Log("加载完成");

           yield return new WaitForSeconds(1f);
           //卸载资源 包含所有Load创建出来的对象
           //bundle.Unload(true);
           //卸载资源 除了Load创建出来的对象
           bundle.Unload(false);
           //释放已加载的资源Object
           //Resources.UnloadAsset(go);
           //卸载所有没有被场景引用的资源对象
           //Resources.UnloadUnusedAssets();
           Debug.Log("卸载完成");
        } 
     }
}

5.运行后能成功加载资源。

注:查看自己本地ip方法:

搜索框输入“cmd”,打开命令提示符窗口,在窗口里输入“ipconfig”,显示的IPv4地址即为自己的本地ip。

注:若AssetBundle加载Cubemap和Panoramic类型的天空盒,打包WebGL运行时材质丢失显示粉色,解决方法如下:

项目里Edit->Project Settings->Graphics->Always Included Shaders里边需要添加3种天空盒材质。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值