Unity开发微信小游戏,使用Addressables管理游戏资源

Tips

文档

Unity适配小游戏的文档,一般自己看一遍就会了(bushi)。 微信小游戏适配方案

下载插件
 往下翻找到下载Unity插件,点击下载![在这里插入图片描述](https://img-blog.csdnimg.cn/ee5bbc32675c4c2cbcc1736ff7eb1ca9.png)
  1. 下载完备用在这里插入图片描述

安装Addressables包

  1. 先搞基本操作,详细以后在补充
  2. 新建小游戏项目 unity版本 2020.3.46
加载Addressable包
工具栏打开Window-Packages Manager
Packages 选择 Unity Registry找到Addressables
install安装
![在这里插入图片描述](https://img-blog.csdnimg.cn/14f2ad031b334de58fc42da556ebd1fd.png)
  1. 切换Build Setting到WebGl
    在这里插入图片描述

  2. 随便搞点资源(xml, png, prefab,scene等…)
    在这里插入图片描述

使用Addressables处理资源

点击Window - Asset Management - Groups打开Addressables Group面板
在这里插入图片描述

点击Create 新建Addressables Settings
在这里插入图片描述
3. 新建之后Addressable Groups面板会新增Default Local Group (Default)分组,Addressables 默认是按Group组进行AssetBundle打包的,将资源放在一个Group组里,那么这些会被打在同一个Group组中
右键面板或者点击左上角的Create按钮可以创建新的分组
在这里插入图片描述
在这里插入图片描述

**Assets目录下会新增AddressableAssetsData文件夹**
![在这里插入图片描述](https://img-blog.csdnimg.cn/85e9b3d38e4e44968e517ceeb2e7122a.png)

其中Default Local Group是默认的Group组设置文件,自己新建的分组(MyAssets)设置文件也在相同的位置
添加资源
1. 直接拖

在这里插入图片描述
2. 点击资源,勾选Inspector面板下的Addressable,Addressable后面的地址就是资源地址。加载的时候可以根据这个地址直接搜索到资源。
在这里插入图片描述
3. Group设置
点击AddressableAssetsData目录下的Default Local Group文件,打开Default Local Group的设置面板
在这里插入图片描述

	Build Path: 资源包创建的位置
	Load Path: 资源包加载的位置
	**LocalBuildPath**资源打包的位置在Library\com.unity.addressables\aa\WebGL下
	**RemoteBuildPath** 资源打包位置在ServerData\WebGL下
  1. 标签Labels设置
    点击红色箭头位置,打开标签选项,点击Manage Labels打开标签设置,新建自己的标签
    在这里插入图片描述
    然后给资源细分标签
    在这里插入图片描述

    1. 打包资源
      点击AddressableAssetsData目录下的AddressableAssetSettings文件
      在这里插入图片描述
      点击Manage Groups打开Groups管理界面,点击Build-New Build- Default Build Script开始创建
      在这里插入图片描述
      创建完成
      在这里插入图片描述

Addressable加载资源

搞代码
根据地址加载图片

在这里插入图片描述

static AsyncOperationHandle<Sprite> spHandle;
    // 地址
    string keys = "Assets/Resouces/cpy.png";

    // Start is called before the first frame update
    void Start()
    {
    
    
        StartCoroutine(loadSprite(keys));
    }

    IEnumerator loadSprite(string kety)
    {
    
    
        spHandle = Addressables.LoadAssetAsync<Sprite>(kety);

        while (!spHandle.IsDone)
        {
    
    
            Debug.Log($"加载中{
      
      spHandle.PercentComplete.ToString()}");
            yield return null;
        }

        onSPLoaded(spHandle.Result);
    }

    void onSPLoaded(Sprite sp)
    {
    
    
        transform.GetComponent<Image>().sprite = sp;
    }
运行结果

在这里插入图片描述

加载预设
static AsyncOperationHandle<GameObject> goHandle;
    // 地址
    string keys = "Assets/Prefabs/Cube.prefab";

    // Start is called before the first frame update
    void Start()
    {
    
    
        StartCoroutine(loadSprite(keys));
    }

    IEnumerator loadSprite(string kety)
    {
    
    
        goHandle = Addressables.LoadAssetAsync<GameObject>(kety);

        while (!goHandle.IsDone)
        {
    
    
            Debug.Log($"加载中{
      
      goHandle.PercentComplete.ToString()}");
            yield return null;
        }

        onOBLoaded(goHandle.Result);
    }

    void onOBLoaded(GameObject sp)
    {
    
    
        GameObject ob = Instantiate(sp);
    }

在这里插入图片描述

按标签批量加载

在这里插入图片描述

static AsyncOperationHandle<IList<Sprite>> spHandle;

    static string iconLabels = "icon";

    // Start is called before the first frame update
    void Start()
    {
    
    
        StartCoroutine(loadAllSprite(iconLabels));
    }

    IEnumerator loadAllSprite(string key)
    {
    
    
        spHandle = Addressables.LoadAssetsAsync<Sprite>(key, onSpLoaded);

        yield return null;
    }

    void onSpLoaded(Sprite sp)
    {
    
    
        Debug.Log($"icon name : {
      
      sp.name.ToString()}");
    }

运行结果如下
在这里插入图片描述

加载场景
static AsyncOperationHandle<SceneInstance> sceneHandle;

    static string sceneKey = "Assets/Scenes/TestScene.unity";

    SceneInstance scene;

    // Start is called before the first frame update
    void Start()
    {
    
    
        StartCoroutine(loadScene(sceneKey));
    }

    IEnumerator loadScene(string key)
    {
    
    
    	// 保留原场景,不保留Addressables.LoadSceneAsync(key, LoadSceneMode.Single, activateOnLoad: true)
    	// 加载模式LoadSceneMode 激活activateOnLoad
        sceneHandle = Addressables.LoadSceneAsync(key, LoadSceneMode.Additive, activateOnLoad: false);
		
        while (!sceneHandle.IsDone)
        {
    
    
            Debug.Log($"load pcs : {
      
      sceneHandle.PercentComplete.ToString()}");
            yield return null;
        }

        scene = sceneHandle.Result;
        onSceneLoaded();
    }

    void onSceneLoaded()
    {
    
    
        scene.ActivateAsync();
    }

运行结果
在这里插入图片描述

API战士
LoadAssetsAsync的三个重载:
	// 用于加载单个标签或地址
	static AsyncOperationHandle<IList<T>> LoadAssetsAsync<T>(object key, Action<T> callback);
	// 用于加载地址+标签, MergeMode 为找到的资源合并模式
	static AsyncOperationHandle<IList<T>> LoadAssetsAsync<T>(IList<object> keys, Action<T> callback, MergeMode mode);
	static AsyncOperationHandle<IList<T>> LoadAssetsAsync<T>(IList<IResourceLocation> locations, Action<T> callback);

卸载资源
Addressables.Release

  1. 从内存中卸载单独的资源
  2. 释放handle
文件预加载

转微信小游戏

导入最开始下载的插件

导入完成后,菜单栏会有微信小游戏按钮,点击转换小游戏打开工具面板
在这里插入图片描述

修改Player Setting

在这里插入图片描述
Color Space 选 Gamma,不然无法打包
Auto Graphics API取消勾选
Graphics API只保留WebGL 1.0 或者WebGL 2.0,不然包体会过大
Lightmap Encoding 选Normal Quality,不然资源会很大

工具面板设置

在这里插入图片描述

基本信息
  1. 游戏APPID,自行到微信小程序中心申请。或者在微信开发者工具中拿一个测试号
    在这里插入图片描述
  2. 游戏资源CDN,存放游戏资源的CDN地址。可以不写,晚点在项目中更改。
  3. 倒出路径,微信小游戏导出的位置
启动Loading设置
  1. 启动背景图
    可以修改封面为自己的Logo
    在这里插入图片描述

  2. 加载阶段视频URL
    更改加载阶段的视频

  3. 首包加载方式
    更改首包的加载方式

  4. 其他可以自己测试

调试编译选项

勾选 Clear Streaming Assets

微信调试
资源

打开转换出来的文件夹,打开webgl文件夹
StreamingAssets(资源文件夹)
.webgl.data.unityweb.bin.txt(资源信息)
index.html
三个文件放到远程CDN上(剩下的小游戏不需要)
在这里插入图片描述

修改CDN地址

打开game.js文件,F找到"DATA_CDN"修改后面的地址即可
在这里插入图片描述

用微信开发者工具打开项目

在这里插入图片描述

其他问题
  1. 中文不显示
    将Unity默认字体全部更改为新的字体
  2. 打开时报编译出错,找不到game.json文件
    这种一般删除源文件重新设置APPID,然后导入即可
    或者找到project.config.json文件,在APPID上面一行添加
    “miniprogramRoot”: “minigame/”,

猜你喜欢

转载自blog.csdn.net/the_vnas/article/details/132882266