当前位置: 首页 > news >正文

Unity 的 WebGL 构建中资源图片访问方式

在 Unity 的 WebGL 构建中,资源图片是可以打包在 工程内部 使用的,前提是这些资源被正确地包含在构建中,并且能够通过合适的方式加载和访问。不同于传统的本地文件访问,WebGL 需要通过 Asset Bundles、Addressables 或 Resources 文件夹等方式来加载和管理资源。

 资源加载的关键点
 WebGL 不支持直接从本地文件系统加载资源,所有资源必须作为项目的一部分打包在构建中。
 资源必须通过 Unity 的资源加载系统(如 Resources 文件夹或 Addressables 系统)来加载。
 为了优化加载时间和性能,最好使用 Unity 的 资源打包机制,例如 Addressables 或 Asset Bundles。

 如何在 WebGL 中使用工程内部的图片资源

 1. 使用 Resources 文件夹
Resources 文件夹是 Unity 中的一个特殊文件夹,任何放在该文件夹中的资源都会被打包到最终的构建中,并且可以在运行时使用 Resources.Load 来加载。

 操作步骤:
1. 创建 Resources 文件夹:在 Unity 项目中的 Assets 文件夹下创建一个名为 Resources 的文件夹。
2. 放置资源:将你的图片文件(如 .png、.jpg 等)放入 Resources 文件夹中。
3. 加载资源:通过 Resources.Load 来动态加载资源。

例如:
csharp
// 加载资源文件夹中的纹理
Texture2D texture = Resources.Load<Texture2D>("Textures/myImage");


这样,Unity 会自动将 myImage 放入构建的 WebGL 文件中,并且在运行时从 WebGL 构建包中加载该纹理。

 注意事项:
 使用 Resources 会将资源直接嵌入到构建中,但需要管理好资源的大小,因为所有放入 Resources 文件夹的资源都会被打包进最终的 WebGL 构建包,这可能导致构建包体积过大。
 在 WebGL 中,加载资源时需要特别注意文件大小和加载时间,特别是在网络环境下。

 2. 使用 Addressables
Addressables 是 Unity 的一项资源管理系统,能够更精细地控制资源的加载和卸载,特别是在 WebGL 中,对于资源的按需加载非常有用。

 操作步骤:
1. 安装 Addressables:首先需要在 Unity 中安装 Addressables 包(可以通过 Unity Package Manager 安装)。
2. 标记资源为 Addressable:将你的资源(例如图片)标记为 Addressable,这样 Unity 会为该资源创建一个地址。
3. 通过地址加载资源:使用 Addressables.LoadAssetAsync 异步加载资源。例如:
csharp

using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;// 加载 Addressable 资源
void Start() {Addressables.LoadAssetAsync<Texture2D>("myImageAddress").Completed += handle => {if (handle.Status == AsyncOperationStatus.Succeeded) {Texture2D texture = handle.Result;// 使用加载的纹理}};
}


 注意事项:
 Addressables 系统适合需要按需加载的情况,尤其是较大的游戏和资源。
 资源不会被直接打包在构建包中,而是以异步方式在需要时加载,可以优化 WebGL 构建的初始加载时间。

 3. 使用 Asset Bundles
Asset Bundles 是 Unity 提供的另一种资源打包和加载的方式。通过 Asset Bundles,你可以将纹理、模型、音频等资源打包到外部文件中,并在运行时加载。

 操作步骤:
1. 创建 Asset Bundle:通过 Unity 的 Asset Bundle 打包工具,将资源(如纹理)打包成外部文件。
2. 在 WebGL 中加载 Asset Bundle:将这些 Asset Bundles 文件放到服务器上,或者在本地加载。
3. 加载资源:通过 Unity 的 AssetBundle.LoadAsset 方法加载资源。

例如:
csharp

// 加载 Asset Bundle 中的资源
AssetBundle myLoadedAssetBundle = AssetBundle.LoadFromFile("myAssetBundle");
Texture2D texture = myLoadedAssetBundle.LoadAsset<Texture2D>("myImage");


 注意事项:
 Asset Bundles 通常适用于需要大量资源并且希望按需下载资源的情况。比如,WebGL 游戏可能将较大的资源(如纹理)打包为 Asset Bundles,并在运行时从服务器或本地加载。
 需要管理好 Asset Bundles 的版本控制和更新。

 4. WebGL 和图片资源
在 WebGL 环境下,图片资源必须通过 Unity 的资源管理系统来加载,不能直接通过文件路径加载,因为 WebGL 是在浏览器中运行的,浏览器的安全策略限制了对本地文件系统的访问。因此,所有图片资源必须嵌入到构建包中或者通过服务器提供的 URL 动态加载。

 总结

 WebGL 构建 中的资源(包括图片)可以和其他平台一样存储在 Resources 文件夹、通过 Addressables 或 Asset Bundles 加载。
 使用 Resources.Load、Addressables 或 Asset Bundles 是将图片嵌入 WebGL 构建并在运行时加载的常见方法。
 在 WebGL 中,避免使用硬编码的本地文件路径。所有资源必须通过 Unity 的加载系统来访问,以便能够在 WebGL 环境中运行。

相关文章:

Unity 的 WebGL 构建中资源图片访问方式

在 Unity 的 WebGL 构建中&#xff0c;资源图片是可以打包在 工程内部 使用的&#xff0c;前提是这些资源被正确地包含在构建中&#xff0c;并且能够通过合适的方式加载和访问。不同于传统的本地文件访问&#xff0c;WebGL 需要通过 Asset Bundles、Addressables 或 Resources …...

WinForms 中使用 MVVM 模式构建应用:实现登录页面、页面导航及 SQLite 数据库连接完整框架搭建过程

前言 在传统的 WinForms 应用程序开发中&#xff0c;很多开发者使用事件驱动的设计模式&#xff0c;直接将业务逻辑编写在界面代码中。然而&#xff0c;随着应用程序的复杂性增加&#xff0c;单一的界面文件变得臃肿&#xff0c;难以测试和维护。借鉴 WPF 中 MVVM&#xff08;…...

Chrome调试工具(查看CSS属性)

来说说这个Chrome调试工具吧&#xff0c;梦回gdb&#xff0c;但是它没有gdb难 打开浏览器 有两种方式可以直接打开Chrome调试工具 直接按F12 鼠标右键页面 --- 检查元素 什么mc玩家是鸣潮 标签页含义 &#x1f912; elements查看标签结构&#xff08;展示html文件&#…...

MQTT从入门到精通之MQTT入门

MQTT入门 1 MQTT概述 1.1 MQTT简介 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;由IBM于1999年开发的一种基于**"发布订阅模式"的轻量级的消息传输协议**&#xff01; 发布订阅模式是一种传统的客户端-服务器架构的替代方案&#xff0c;因为…...

Hadoop生态系统主要包括哪些组件以及它们的作用

Hadoop生态系统是一个开源的大数据处理框架&#xff0c;它主要由一系列组件构成&#xff0c;每个组件都承担着不同的功能和作用。以下是Hadoop生态系统的主要组件及其作用的详细解释&#xff1a; HDFS&#xff08;Hadoop Distributed File System&#xff09; 作用&#xff1a…...

OpenResty 1.27.1.1 已经正式发布

OpenResty 1.27.1.1 已经正式发布&#xff0c;这是一个基于 NGINX 和 LuaJIT 的 web 平台。以下是关于此次发布的一些重点信息和更新内容&#xff1a; 下载与安装 你可以在此处下载最新版本的 OpenResty。提供了便携式源代码分发、Win32/Win64 二进制分发以及为 Ubuntu、Debi…...

定高虚拟列表:让大数据渲染变得轻松

定高虚拟列表 基本认识 在数据如潮水般涌来的今天&#xff0c;如何高效地展示和管理这些数据成为了开发者们面临的一大挑战&#xff0c;传统的列表渲染方式在处理大量数据时&#xff0c;往往会导致页面卡顿、滚动不流畅等问题&#xff0c;严重影响用户体验&#xff08;在页面…...

python request与grequests该如何选择

requests & grequests requests 和 grequests 是Python中用于发送HTTP请求的不同库。requests 是一个同步、阻塞式库&#xff0c;而 grequests 是基于 requests 封装的异步非阻塞库&#xff0c;它利用了 gevent 库提供的协程机制&#xff0c;能够并发发送多个请求。 选择…...

Unity3D UI 拖拽

Unity3D 实现 UI 元素拖拽功能。 UI 拖拽 通常画布上的 UI 元素都是固定位置的&#xff0c;我们可以通过实现拖拽接口&#xff0c;让 UI 元素可以被拖拽到其他位置。 拖拽接口 创建一个脚本 UIDrag.cs&#xff0c;在默认继承的 MonoBehaviour 后面&#xff0c;再继承三个接…...

介绍一下memcpy(c基础)

memcpy函数void *memcpy(void *dest, const void *src, size_t n); dest&#xff1a;指向目标内存区域的指针&#xff0c;即复制的目的地。src&#xff1a;指向源内存区域的指针&#xff0c;即要被复制的内容的来源。n&#xff1a;要复制的字节数 主要功能是将src所指向的内存…...

【网络面试篇】HTTP(2)(笔记)——http、https、http1.1、http2.0

目录 一、相关面试题 1. HTTP 与 HTTPS 有哪些区别&#xff1f; 2. HTTPS 的工作原理&#xff1f;&#xff08;https 是怎么建立连接的&#xff09; &#xff08;1&#xff09;ClientHello &#xff08;2&#xff09;SeverHello &#xff08;3&#xff09;客户端回应 &a…...

python-23-一篇文章帮你理解Python推导式

python-23-一篇文章帮你理解Python推导式 一.简介 在 Python 中&#xff0c;推导式&#xff08;Comprehensions&#xff09;是一个简洁的语法&#xff0c;用于通过某种可迭代对象快速生成新的对象&#xff08;如列表、字典、集合等&#xff01;来开始我们今天的日拱一卒&…...

WPF中如何简单的使用CommunityToolkit.Mvvm创建一个项目并进行 增删改查

目录 开始前准备的数据库dbblog如下&#xff1a; 第一步&#xff1a;创建项目后下载四个NuGet程序包 第二步&#xff1a;删除原本的MainWindow.XAML文件 并创建如下的目录结构 然后在View文件夹下面创建Login.XAML和Main.XAML 并且在App.XAML中将启动项改为Login.X…...

CesiumJS 案例 P15:检测标记、鼠标点击移动标记、鼠标拖动标记

CesiumJS CesiumJS API&#xff1a;https://cesium.com/learn/cesiumjs/ref-doc/index.html CesiumJS 是一个开源的 JavaScript 库&#xff0c;它用于在网页中创建和控制 3D 地球仪&#xff08;地图&#xff09; 一、检测标记 <!DOCTYPE html> <html lang"en&…...

Webserver(4.9)本地套接字的通信

目录 本地套接字 本地套接字 TCP\UDP实现不同主机、网络通信 本地套接字实现本地的进程间的通信&#xff0c;类似的&#xff0c;一般采用TCP的通信流程 生成套接字文件 #include<arpa/inet.h> #include<stdio.h> #include<stdlib.h> #include<unistd.h&…...

[IAA系列] Image Aesthetic Assessment

Preface 本文旨在记录个人结合AI工具对IAA这个领域的一些了解&#xff0c;主要是通过论文阅读的方式加深对领域的了解。有什么问题&#xff0c;欢迎在评论区提出并讨论。 什么是IAA Image Aesthetic Assessment&#xff08;图像美学评估&#xff09;是一种评估图像在视觉上的…...

基于springboot的高校科研管理系统(源码+调试+LW)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据你想解决的问题&#xff0c;今天给…...

Flutter环境配置

配置环境变量 PUB_HOSTED_URLhttps://pub.flutter-io.cn FLUTTER_STORAGE_BASE_URLhttps://storage.flutter-io.cn 这个命令是用来配置 Flutter 的镜像源地址&#xff0c;主要是为了解决在中国大陆地区访问 Flutter 官方资源较慢的问题 具体的操作做如下: 右键点击"此…...

Rip动态路由及Rip动态路由优化

动态路由Rip Tip&#xff1a;Rip动态路由实现多个路由间不同网段通信。 本次实验目的&#xff0c;通过给ar1,ar2,ar3配置rip动态路由&#xff0c;实现pc1 ping通 pc2。 AR1配置如下&#xff1a; <Huawei>sy Enter system view, return user view with CtrlZ. [Huawei]…...

双路快速排序和三路排序算法

双路快速排序 一、概念及其介绍 双路快速排序算法是随机化快速排序的改进版本&#xff0c;partition 过程使用两个索引值&#xff08;i、j&#xff09;用来遍历数组&#xff0c;将 <v 的元素放在索引i所指向位置的左边&#xff0c;而将 >v 的元素放在索引j所指向位置的…...

SQL server增删改查语句和实例

在 SQL Server 中&#xff0c;增删改查操作分别对应 INSERT、DELETE、UPDATE 和 SELECT 语句。以下是具体介绍及实例&#xff1a; 一、插入数据&#xff08;INSERT&#xff09; 语法&#xff1a; INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, val…...

强化学习_06_pytorch-PPO2实践(ALE/Breakout-v5)

一、环境适当调整 数据收集&#xff1a;RecordEpisodeStatistics进行起始跳过n帧&#xff1a;baseSkipFrame一条生命结束记录为done:EpisodicLifeEnv得分处理成0或1:ClipRewardEnv叠帧: FrameStack 图像环境的基本操作&#xff0c;方便CNN捕捉智能体的行动 向量空间reset处理修…...

《JVM第8课》垃圾回收算法

文章目录 1.标记算法1.1 引用计数法1.2 可达性分析法 2.回收算法2.1 标记-清除算法&#xff08;Mark-Sweep&#xff09;2.2 复制算法&#xff08;Coping&#xff09;2.3 标记-整理算法&#xff08;Mark-Compact&#xff09; 3.三种垃圾回收算法的对比 为什么要进行垃圾回收&…...

SpringBoot整合Freemarker(二)

if分支 语法&#xff1a; <#if condition>... <#elseif condition2>... <#elseif condition3>... <#else>... </#if> 例子&#xff1a; <#if x 1>x is 1 </#if> --------------------------------- <#if x 1>x is 1 <…...

element plus el-form自定义验证输入框为纯数字函数

element plus 的el-form 使用自定义验证器&#xff0c;验证纯数字&#xff0c;禁止输入小数、中文、字母、特殊符号。input的maxlength为最大输入多少位长度 效果图 <el-form ref"dataFormRef" :model"dataForm" :rules"dataRules" label-w…...

Android笔记(三十一):Deeplink失效问题

背景 通过deeplink启动应用之后&#xff0c;没关闭应用的情况下&#xff0c;再次使用deeplink会失效的问题&#xff0c;是系统bug导致的。此bug仅在某些设备&#xff08;Nexus 5X&#xff09;上重现&#xff0c;launchMode并且仅当应用程序最初通过深层链接启动并再次通过深层…...

图神经网络初步实验

实验复现来源 https://zhuanlan.zhihu.com/p/603486955 该文章主要解决问题&#xff1a; 1.加深对图神经网络数据集的理解 2.加深对图神经网络模型中喂数据中维度变化的理解 原理问题在另一篇文章分析&#xff1a; 介绍数据集&#xff1a;cora数据集 其中的主要内容表示为…...

创建线程时传递参数给线程

在C中&#xff0c;可以使用 std::thread 来创建和管理线程&#xff0c;同时可以通过几种方式将参数传递给线程函数。这些方法包括使用值传递、引用传递和指针传递。下面将对这些方法进行详细讲解并给出相应的代码示例。 1. 值传递参数 当你创建线程并希望传递参数时&#xff…...

兴业严选|美国总统都是不良资产出身 法拍市场是否将大众化

北京时间11月6日&#xff0c;特朗普赢得美国大选。 说起特朗普那就不得不提他的发家史&#xff0c;那可真是一笔笔不良资产投资堆出来的。 没错&#xff0c;特朗普就是处理不良资产的高手&#xff0c;战果丰硕。 改造斯威夫特小镇、 康莫德酒店、打造特朗普&#xff08;TRUM…...

C#-拓展方法

概念&#xff1a;为现有的非静态变量类型&#xff0c;添加方法 语法&#xff1a; 访问修饰符 static 返回值 函数名(this 拓展类名 参数名, 参数类型 参数名,参数类型 参数名....){} 而public static void F(this Console()){ }是错的。Console是静态类不可以为静态类添加方…...