PlayerSettings.WebGL.emscriptenArgs设置无效的问题

1)PlayerSettings.WebGL.emscriptenArgs设置无效的问题
2)多个小资源包合并为大资源包的疑问
3)AssetBundle在移动设备上丢失
4)Unity云渲染插件RenderStreaming,如何实现多用户分别有独立的操作


这是第381篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。

WebGL

Q:游戏里用了C++的第三方库集成到xLua里面,端版是用CMake构建,可以配置宏、Include路径等,很方便。

我现在用Unity 2021.3发布的WebGL版本,xLua是把所有Lua代码放在了“工程目录/WebGLPlugins”下面,在引擎里去#include这里的C代码,也没问题。

但是自己的C/C++代码比较多,也不能全部扔在同一个目录下,如果加了目录,就有跨目录Include的问题(主要是lua.h,lauxlib.h)。从实际表现来看,include .c或.cpp时,用到的.h文件如果是在同目录就没问题,如果跨目录了就会找不到。

我用PlayerSettings.WebGL.emscriptenArgs = "-Imy_file_folder_path";这样设置搜索路径,但是没用;然后定义宏-Dxx也没用,不知道为什么。(参数中没有自己定义的路径和宏,都是Unity自己的,虽然ProjectSettings.asset已经生效了。)

请问有解决方案吗?

针对以上问题,有经验的朋友欢迎转至社区交流分享:
UWA问答 | 游戏开发者互动问答社区 | 侑虎科技


AssetBundle

Q:看有文章说可以利用接口LoadFromFile(string path, uint crc, ulong offset);来实现资源包合并为一个打包,且能减少IO操作,不知流程是否如下理解?

合并前:
资源包A:assets_res_a.bundle
资源包B:assets_res_b.bundle
合并前对资源包的加载方式:
AssetBundle a = AssetBundle.LoadFromFile("assets_res_a.bundle");
AssetBundle b = AssetBundle.LoadFromFile("assets_res_b.bundle");

合并后:
资源包AB:assets_res_ab.bundle
并且记录了a、b在大包(ab)中的offset(A包的offset=0,B包offset=12)
合并后对资源包的加载方式:
AssetBundle a = AssetBundle.LoadFromFile("assets_res_ab.bundle", 0, 0);
AssetBundle b = AssetBundle.LoadFromFile("assets_res_ab.bundle", 0, 12);

从接口上看,合并后并没有减少IO操作,仍是两次对assets_res_ab.bundle的读取,除非引擎内部有做优化,当第一次读assets_res_ab.bundle有IO,在没释放情况下第二次读就不是IO了,求指点迷津。

A:作为技术,精益求精的同时也要注意易用性以及可读性。

多个AssetBundle合并到一起这个想法,有点类似我之前Cocos的一个方案,所有资源都按照字节的方式加入到一个byte[]中。

此类优点是IO或者Hander的Cache,可能还有加密。

但是缺点个人觉得更多,首先是热更新量的不稳定,可能只更新1个文件,结果一连串的AB合成的AB都要热更,对于IO的那点损失,实打实的更新包的增大好像更是得不偿失。

其次是Bug的查找,做一件事多了N个步骤,环节的增多,都会带来不确定性。

最后就是如果2个AssetBundle真的要合成一个AssetBundle,那为何不将两个AssetBundle中的资源打成一个AssetBundle呢?

如果觉得大文件有大文件的更新思路,比如差分,那么BSDiff确实可以做到这个,我自己本身也是用的,但是有缺点。对于大文件来说,来做Diff是非常耗时的,我的经验是50MB以上就很费了,时间和内存上都不是很能接受,如果你的AssetBundle是2G,Diff一下的速度可想而知。

感谢夏霖锐@UWA问答社区提供了回答


AssetBundle

Q:外网项目经常出现本地AssetBundle包丢失的情况,表现为:

1. 输出报错日志:Unable to open archive file: abPath
2. System.IO.File.Exists(abPath)接口返回false

在荣耀、华为系列手机出现的较为频繁,请问大家有遇到过类似的情况吗,应该怎么排查此类问题呢?

之前看到过类似的帖子,一直认为是这个问题,但后面发现并不是偶现的权限问题,后面再次启动也会报同样的错误。

原贴链接:
UWA问答 | 游戏开发者互动问答社区 | 侑虎科技

A:这两款手机真有遇到过类似问题,如果APK安装到了SD卡,路径会有变化,例如“/storage/0123-4567/Android/Data”,其中的“-”,是只有华为手机才有,所以需要转义,路径才能正常读取,仅供参考。

感谢郑骁@UWA问答社区提供了回答


Rendering

Q:Unity云渲染插件RenderStreaming,如何实现一台机器上启动多个实例,也就是多用户分别有独立的操作?

Unity的RenderStreaming例子已经跑通,但是没有写如何实现通过一个服务器,多个客户端用户独立操作的实现,比如我想把云渲染的渲染端部署到一个服务器上,另外几台电脑分别连接这个服务器请求云渲染画面,每一个客户端的电脑都有自己独立的画面。

A:这时候你就需要开多个实例,每个实例分配一个端口来连接,至少我是这么做的。

感谢LacusClyne@UWA问答社区提供了回答

封面图来源于网络


今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。

UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/804488.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Meta 的 Llama 模型系列即将迎来第三次大更新

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

linux启动流程(s3c2400)

概述 大致流程:内核(kernel)都是由bootloader程序引导启动的,所以我们应该先烧进去bootloader程序。然后可以通过保存的内核代码或者通过远程连接(nfs/tftp)的主机下载再运行,再挂载根文件系统。…

ppt从零基础到高手【办公】

第一章:文字排版篇01演示文稿内容基密02文字操作规范03文字排版处理04复习&作业解析第二章:图形图片图表篇05图形化表达06图片艺术化07轻松玩转图表08高效工具&母版统一管理09复习&作业解析10轻松一刻-文字图形小技巧速学第三章:…

SWM341系列应用(RTC、FreeRTOS\RTTHREAD应用和Chip ID)

SWM341系列RTC应用 22.1、RTC的时钟基准 --liuzc 2023-8-17 现象:客户休眠发现RTC走的不准,睡眠2小时才走了5分钟。 分析与解决:经过排查RTC的时钟源是XTAL_32K,由于睡眠时时设置XTAL->CR0;,会把XTAL_32K给关…

C语言:指针详解(1)

目录 一、内存和地址 1.内存 2.究竟该如何理解编址 二、指针变量和地址 1.取地址操作符(&) 2.解引用操作符(*) 3.指针变量的大小 三、指针变量类型的意义 1.指针的解引用 2.指针-整数 3.void*指针 四、const修饰指针 1.const修饰变量 2.const修饰指针变量 五…

公开课学习——仿抖音直播平台

文章目录 直播抖音的直播原理Java继承直播客户端工具: ffmpeg客户端和网页集成CDN网络——性能提升关键——边缘计算 实时聊天——IM系统怎么实现?——websocketIM系统消息如何转发?直播场景IM系统是什么样子? 直播 抖音的直播原…

安全操作代码优化思路

理论依据 数据增强和样本选择 在训练阶段,您可以考虑添加数据增强来提升模型的鲁棒性和泛化能力。针对人脸检测任务,可以尝试以下改进: 对输入图像进行随机裁剪、缩放、旋转、翻转等数据增强操作,以增加数据的多样性。 使用难样…

操作系统—修改xv6内核调度算法

文章目录 修改xv6内核调度算法1.实验环境2.基于优先级的调度算法(1).基本实现思路(2).实现流程(3).一些问题 3.乐透调度算法(1).思路(2).实现流程(3).一些问题 总结参考资料 修改xv6内核调度算法 1.实验环境 这一次的实验因为是在xv6内核中实现一些调度算法,因此我…

在Linux系统上实现TCP(socket)通信

一.什么TCP TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。 二.TCP通信流程 三. TCP 服务器端 1 创建socket int sockfd socket(AF_INET, SOCK_STREAM, 0); //SOCK_STREAM tcp通信2 绑定(bind) struct sockaddr_in myad…

C++实现幻方实验

我们这个实验目的是实现大于2的奇数的n阶幻方 根据上述的例子我们可以看到一些规律,显示1放在最上方中间的位置,然后向右上方延申,在达到n这个数字时,停止延申,然后在n的下方开始n1的新一轮延申。明白了原理之后就很容…

计算机专业,不擅长打代码,考研该怎么选择?

考研其实和你的代码能力关系不大 所以在选学校以前可以看看有哪些学校复试是要求上机撸代码的,可能会要求比较严 初试真的不用担心代码问题,我也是基本零编程能力就开始备考考研的... 本人双非科班出身备考408成功上岸,在这里也想给想考40…

css面试题--定位与浮动

1、为什么需要清除浮动? 在非IE浏览器下,容器不设高度且子元素浮动时,容器高度不能被内容撑开,内容会溢出到容器外面而影响布局。这种现象被称为浮动。 浮动的原理:浮动元素脱离文档流,不占用空间&#xff…

使用 wangeditor 解析富文本并生成目录与代码块复制功能

在 Web 开发中&#xff0c;经常需要使用富文本编辑器来编辑和展示内容。wangeditor 是一个强大的富文本编辑器&#xff0c;提供了丰富的功能和灵活的配置&#xff0c;但是官方并没有提供目录导航和代码块的复制功能&#xff0c;所以我自己搞了一个 <template><div cla…

5个超好用的Python工具,赶紧码住!

Python开发软件可根据其用途不同分为两种&#xff0c;Python代码编辑器和Python集成开发工具&#xff0c;两者配合使用极大的提高Python开发人员的编程效率。掌握调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制等操作。 Python常用工具&…

小白新手学习 Python 使用哪个 Linux 系统更好?

对于小白新手学习Python&#xff0c;选择哪个Linux系统是一个很重要的问题&#xff0c;因为不同的Linux发行版&#xff08;distribution&#xff09;有着不同的特点、优势和适用场景。在选择时&#xff0c;需要考虑到易用性、学习曲线、社区支持等因素。 Ubuntu Ubuntu 是一个…

分布式系统中的唯一ID生成方法

通常在分布式系统中&#xff0c;有生成唯一ID的需求&#xff0c;唯一ID有多种实现方式。我们选择其中几种&#xff0c;简单阐述一下实现原理、适用场景、优缺点等信息。 目录 数据库多主复制UUID工单服务器雪花算法总结 数据库多主复制 数据库通常有自增属性&#xff0c;在单机…

CSS 实现无限波浪边框卡片

CSS 实现无限波浪边框卡片 效果展示 鼠标悬停效果&#xff0c;底部色块的边框是无限滚动的波浪 鼠标没有悬停效果 CSS 知识点 CSS 基础知识回顾使用 radial-gradient 实现波浪边框使用 anumate 属性实现波浪边框动画和控制动画运动 波浪实现原理 波浪边框的实现思路其…

dayjs 判断是否今天、本周内、本年内、本年外显示周几、月份等

效果: 判断是否今天需从 dayjs 中引入 isToday 插件&#xff1b; 判断是否两个日期之间需从 dayjs 中引入 isBetween 插件 import dayjs from dayjs import isToday from dayjs/plugin/isToday import isBetween from dayjs/plugin/isBetween// 注册插件 dayjs.extend(isBet…

DP:子数组模型

一、最大子数组和 . - 力扣&#xff08;LeetCode&#xff09; 二、环形子数组的最大和 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int maxSubarraySumCircular(vector<int>& nums) {//动态规划思想解决 //环形数组问题&#xff0c;尝试转…

01-Git 快速入门

https://learngitbranching.js.org/?localezh_CN在线练习git 1. Git 安装好Git以后, 先检查是否已经绑定了用户名和邮箱 git config --list再检查C:\Users\xxx.ssh 下是否存在 id_rsa.pub , 存在的话复制其内容到 GitHub 的 SSH KEY 中 没有这一步, PUSH操作的时候会报错:…