Unity Addressables学习笔记(3)---加载远程场景Scenes

前言

Unity Addressables学习笔记—汇总

正文

1.创建一个新场景

我是创建在Resources/Scenes目录下,如图:
在这里插入图片描述

2.为场景创建一个Addressables的Group

Game1Group就是我新创建的一个Group用来存放场景1的所有资源,分组的配置跟Remote一样,都是远程的,加载地址是我本地启动的web服务器地址,URL里WebGL那个目录也不是必须的,根据自己实际的来。
在这里插入图片描述

3.把新场景和场景里用到的资源全部拖入到Game1Group里

上边的图就是拖完的状态。

4.在初始化的场景里添加代码,用Addressables的方式加载新的场景Game1.

我是在最开始的场景里图片1那个开始按钮上加了个点击事件去触发加载Game1这个场景的

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.UI;

public class GameController : MonoBehaviour
{
    private Sprite sprite;
    public Button btn;
    public List<string> list;
    void Start()
    {
        //Addressables.Instantiate("Play Button").Result.transform.position = new Vector3(2f, 2f);
        foreach (string name in list)
        {
            Addressables.LoadAssetAsync<GameObject>(name).Completed += SpriteLoadedObj;
        }
        //PlayerPrefs.DeleteKey(Addressables.kAddressablesRuntimeDataPath);
        Addressables.LoadAssetAsync<Sprite>("Play Button Img").Completed += SpriteLoaded;
    }



    private void SpriteLoaded(AsyncOperationHandle<Sprite> obj)
    {
        switch (obj.Status)
        {
            case AsyncOperationStatus.Succeeded:
                sprite = obj.Result;
                Debug.Log(sprite);
                btn.image.sprite = sprite;
                break;
            case AsyncOperationStatus.Failed:
                Debug.LogError("Sprite load failed.");
                break;
            default:
                //case AsyncOperationStatus.None:
                break;
        }
    }

    private void SpriteLoadedObj(AsyncOperationHandle<GameObject> obj)
    {
        switch (obj.Status)
        {
            case AsyncOperationStatus.Succeeded:
                GameObject a = Instantiate(obj.Result);
                a.transform.position = new Vector2(2f, 2f);
                break;
            case AsyncOperationStatus.Failed:
                Debug.LogError("Sprite load failed.");
                break;
            default:
                //case AsyncOperationStatus.None:
                break;
        }
    }


    // Update is called once per frame
    void Update()
    {

    }
    public void onClick()
    {
        Addressables.LoadSceneAsync("Game1");
    }
}

5.场景1:用Addressables创建一个对象,在Hierarchy里拖进去一个对象,一共2个对象

下边是场景1拖进去的一个对象
在这里插入图片描述
下边是GameObject上随便绑定一个C#脚本再去创建一个对象

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;

public class Game1Controller : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Addressables.LoadAssetAsync<GameObject>("Layer 10").Completed += SpriteLoadedObj;
    }

    // Update is called once per frame
    private void SpriteLoadedObj(AsyncOperationHandle<GameObject> obj)
    {
        switch (obj.Status)
        {
            case AsyncOperationStatus.Succeeded:
                GameObject a = Instantiate(obj.Result);
                a.transform.position = new Vector2(2f, 2f);
                break;
            case AsyncOperationStatus.Failed:
                Debug.LogError("Sprite load failed.");
                break;
            default:
                //case AsyncOperationStatus.None:
                break;
        }
    }
}

6.重点:是用Addressables加载远程场景,所以这个场景不要在build的时候一起打包进去,下图只有一个初始场景没有Game1场景。

在这里插入图片描述

7.用Addressables打包,然后把ServerData下的文件都拷贝到Web服务器上,不知道说什么看前2个笔记。然后直接Unity Build And Run,效果图:

进入初始化场景:

在这里插入图片描述

点击小绿按钮,进入场景2(例子里的场景名:Game1),2个对象一个是Game1场景里拖到Hierarchy里的预制体,一个是用C#代码通过Addressables创建的对象,都出来了!

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Unity Addressables 在 WebGL 平台加载缓慢的原因有多个方面。 首先,WebGL 平台是基于浏览器的运行环境,相比于本地平台,存在网络传输和解析字节码的延迟。这会导致加载和解析资源的时间增加,从而使 Unity Addressables加载速度变慢。 其次,WebGL 平台受到浏览器的安全限制和网络环境的影响,可能会导致网络通信速度减慢。尤其是当需要从远程服务器获取资源时,网络延迟和带宽限制可能会增加资源加载的时间。 此外,WebGL 平台的硬件设备和浏览器版本碎片化也会影响 Addressables加载速度。不同的硬件设备和浏览器版本对于资源的加载和渲染效率可能有所差异,因此可能需要额外的适配和优化工作。 为了缓解 Unity Addressables 在 WebGL 平台的加载缓慢问题,可以考虑以下几个方面的优化: 1. 减少资源的大小和数量,避免不必要的资源加载和解析时间。 2. 使用压缩格式的资源,以减小资源文件的大小,并加快网络传输速度。 3. 尽量避免远程加载资源,可以将资源预先打包到 WebGL 构建中,减少网络传输时间。 4. 在资源加载之前,展示加载中的提示信息或动画,让用户意识到加载需要一定的时间,提高用户体验。 5. 针对 WebGL 平台进行性能优化,如使用适当的渲染技术、减少渲染批次等,提高整体性能。 需要注意的是,不同的项目和情况可能需要针对性的优化方法,可以综合考虑以上建议并结合具体情况进行优化工作,以提高 Unity Addressables 在 WebGL 平台的加载速度。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

其实我是真性情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值