Unity Addressables学习笔记(1)---创建远程服务器加载资源

前言

Unity Addressables学习笔记—汇总

例子1:加载一个图片

1.首先创建一个UI Image,空白图片,资源打包方式选择真是部署的

在这里插入图片描述
在这里插入图片描述

2.修改远程发布和加载配置

Bulid Path选择RemoteBuildPath

Load Path我选择了custom,地址是http://localhost:8080/WebGL/

在这里插入图片描述

遇坑1 :最开始我选择的Build Path 是 LocalBuildPath,Load Path是custom的时候报错如下:

BuildPath for group '***' is set to the dynamic-lookup version of StreamingAssets, but LoadPath is not. 

解决办法:把Build Path 改为RemoteBuildPath后才好,我也不知道为什么不能把本地的资源放到远程资源上,可能是有区别吧,必须把远程资源打包到远程服务器上也能好理解。

3.打包放服务器里

Bulid Path选择RemoteBuildPath,打包的文件会出现在ServerData文件夹里,这个文件夹在Unity里是加载不出来的,里边是对应的是你要打包的程序类型,我的是网页所以是WebGL.我的打包文件名是:remote_assets_all_9cd0b0249adf18fa843683539bbac8b9.bundle
之后我拷贝到了一个本地的服务器上,我用的Spring Boot,因为我本身是搞Java的
pom.xml依赖就一个

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.3.12.RELEASE</version>
        </dependency>
    </dependencies>

启动函数

@SpringBootApplication
public class CDNBackend {
    private static ApplicationContext context;

    public static void main(String[] args) {
        context = SpringApplication.run(CDNBackend.class, args);
    }

    public static ApplicationContext getApplicationContext() {
        return context;
   

遇坑1.放到服务器上的spring boot静态资源不能访问。

在这里插入图片描述

我在static下边创建了一个WebGL目录当然没有也行,这个路径要跟上边的Load Path 对应,主要是.bundle这个文件下载不了,所以添加了一个配置类,解决不能访问的问题

@Configuration
public class ShowImage extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //注:addResourceHandler("/WebGL/**")这个是配置你的URL
        //addResourceLocations("classpath:/static/WebGL/")这个是你的文件目录
        registry.addResourceHandler("/WebGL/**").addResourceLocations("classpath:/static/WebGL/");
        super.addResourceHandlers(registry);
    }
}

4. Unity C#加载远程图片

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 Image img;
    void Start()
    {
        //Addressables.InstantiateAsync("Play Button");
        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;
                #加载完成的时候给img设置sprite
                img.sprite = sprite;
                break;
            case AsyncOperationStatus.Failed:
                Debug.LogError("Sprite load failed.");
                break;
            default:
                //case AsyncOperationStatus.None:
                break;
        }
    }
}

遇坑1.因为是WebGL游戏,所以是WEB访问WEB,存在一个跨域问题。WebGL游戏报错:

from origin ‘http://localhost:57545’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.

p://localhost:8080/WebGL/remote_assets_all_9cd0b0249adf18fa843683539bbac8b9.bundle' from origin 'http://localhost:57545' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

解决方式:

在Spring Boot的服务器端添加跨域白名单类

@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {

    public void addCorsMappings(CorsRegistry registry) {
        //CorsRegistration addMapping(String pathPattern): 添加路径映射,如 /admin/info,或者 /admin/**
        registry.addMapping("/**")
                //是否发送Cookie
                .allowCredentials(true)
                //放行哪些原始域, * 表示所有
                .allowedOrigins(new String[]{"http://127.0.0.1:57545", "http://localhost:57545"})
                //放行哪些请求方式
                .allowedMethods(new String[]{"GET", "POST", "PUT", "DELETE"})
                //放行哪些原始请求头部信息
                .allowedHeaders("*");
        //暴露哪些头部信息,不能设置为 * : .exposedHeaders();
    }
}

最终效果 加载图片成功

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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、付费专栏及课程。

余额充值