您现在的位置是:首页 >技术交流 >Unity Addressables学习笔记(1)---创建远程服务器加载资源网站首页技术交流
Unity Addressables学习笔记(1)---创建远程服务器加载资源
简介Unity Addressables学习笔记(1)---创建远程服务器加载资源
例子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();
}
}
最终效果 加载图片成功
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。