unity webgl开发踩坑——从开发、发布到优化

这篇具有很好参考价值的文章主要介绍了unity webgl开发踩坑——从开发、发布到优化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

又是一个阳光明媚的早上,突然老板召集开会说要将一个android项目适配webgl,没办法赶紧用unity改一下踩踩坑;这里记录一下这些天的踩坑过程。

环境

使用unity2021.3.4f1c1,visual studio2019,visual studio code

unity webgl的一些注意点

videoplayer修改——》Video Player WebGL插件

videoplayer仅适用于安卓和PC,如果有苹果适配的需求的话,那就要用到这个插件:unity商店——Video Player WebGL
不过,还有一些点要注意,这些在Video Player WebGL的说明文档最后也有说,我这里省流一部分:
(1)safari不支持有声视频自动播放,必须用户点击,使用pointerDown事件
(2)safari同时只能1个有声视频播放
所以,我这边的方案是:使用静音自动播放;播放结束后调用VideoPlayerWebGL.CreateVideo重新生成新video来播放下一个视频,从而实现切换。

 public void MYchange(VideoPlayerWebGL newone)
    {

        if (nowIndex >= videoData.clips.Length)
            nowIndex = 0;
        newone.CreateVideo(VideoPlayerWebGL.srcs.StreamingAssets, $"{videoData.clips[nowIndex++]}.mp4", newone.crossOrigin,
            newone.autoplay, newone.loop, newone.muted, newone.volume, newone.pan, newone.forceMono, newone.playbackSpeed, newone.targetTexture, newone.events);

    }

另外,videoplayer需要注意下面这些点:
(1)使用url读取播放,不能直接引用,否则播放不了
(2)将视频打包成AB再读取为clip也是不行的,必须使用url,而且url还必须是可以直接访问的视频!

text修改——解决不能显示汉字问题

不能使用默认字体,要下载个TTF字体来使用

制作、读取ab包

(1)这里有个坑,因为楼主使用的是URP,所以在编辑器中读取AB包时会变成粉色,需要调用脚本,脚本来源自文章最下面的参考部分:


#if UNITY_EDITOR
    public static class AssetBundleEditorUtil
    {
        public static void FixShadersForEditor(GameObject prefab)
        {
            var renderers = prefab.GetComponentsInChildren<Renderer>(true);
            foreach (var renderer in renderers)
            {
                ReplaceShaderForEditor(renderer.sharedMaterials);
            }

            var tmps = prefab.GetComponentsInChildren<TextMeshProUGUI>(true);
            foreach (var tmp in tmps)
            {
                ReplaceShaderForEditor(tmp.material);
                ReplaceShaderForEditor(tmp.materialForRendering);
            }

            var spritesRenderers = prefab.GetComponentsInChildren<SpriteRenderer>(true);
            foreach (var spriteRenderer in spritesRenderers)
            {
                ReplaceShaderForEditor(spriteRenderer.sharedMaterials);
            }

            var images = prefab.GetComponentsInChildren<Image>(true);
            foreach (var image in images)
            {
                ReplaceShaderForEditor(image.material);
            }

            var particleSystemRenderers = prefab.GetComponentsInChildren<ParticleSystemRenderer>(true);
            foreach (var particleSystemRenderer in particleSystemRenderers)
            {
                ReplaceShaderForEditor(particleSystemRenderer.sharedMaterials);
            }

            var particles = prefab.GetComponentsInChildren<ParticleSystem>(true);
            foreach (var particle in particles)
            {
                var renderer = particle.GetComponent<Renderer>();
                if (renderer != null) ReplaceShaderForEditor(renderer.sharedMaterials);
            }
        }

        public static void ReplaceShaderForEditor(Material[] materials)
        {
            for (int i = 0; i < materials.Length; i++)
            {
                ReplaceShaderForEditor(materials[i]);
            }
        }

        public static void ReplaceShaderForEditor(Material material)
        {
            if (material == null) return;

            var shaderName = material.shader.name;
            var shader = Shader.Find(shaderName);

            if (shader != null) material.shader = shader;
        }
    }
#endif

修改一下即可;
(2)坑二:发布时勾选enable exception---------explicitly thrown exceptions only,否则加载ab包报错,目前原因不明
(3)读取需要使用unitywebrequest

unity audioclip减小建议

如果在移动端观看,240P都蛮清晰的(看个人)

减小包体 全过程记录

1、一开始有207MB
2、压缩纹理、将TextMeshProUGUI改为Text后,剩下111MB
3、删除Resources文件夹中无用的东西,将预制体、场景中隐藏的模型删除,剩下101MB
4、将每个场景中的环境模型做成预制体,然后打AB包,剩下64MB
5、将场景中videoplayer的直接对videoclip引用移除,改为读取url,剩下16MB

unity webgl优化,C#,心得,杂谈,unity,webgl,游戏引擎

unity webgl优化,C#,心得,杂谈,unity,webgl,游戏引擎

webgl的build

过程各位应该很熟悉了我就不多说了,关键的地方截图几张好了
unity webgl优化,C#,心得,杂谈,unity,webgl,游戏引擎
unity webgl优化,C#,心得,杂谈,unity,webgl,游戏引擎
unity webgl优化,C#,心得,杂谈,unity,webgl,游戏引擎

webgl部署到本地、云(IIS)

具体过程可以看下面的参考,主要注意几个点:
(1)最好新建站点来搞,楼主有试过将webgl部署在有.NET CORE API站点的wwwroot上,结果发现一直报404,填了MIME也没用,目前暂不知道什么问题,欢迎各位大佬评论!
unity webgl优化,C#,心得,杂谈,unity,webgl,游戏引擎
unity webgl优化,C#,心得,杂谈,unity,webgl,游戏引擎
(2)经常说的Mime添加一下:.unityweb、.data、.unity3d
(3)测试用的免费云我也放一下这里: uniCloud

webgl部署云如何提升加载速度

使用公司的云,带宽3M,结果加载1个10几M的unityweb文件都要接近1分钟,这种情况可能要考虑加带宽或者使用CDN服务比较好。先开个章节后续补充。如果有同样经历的大佬也欢迎评论!
顺便一提,免费云有CDN,加载时间差不多7、8秒,快的离谱。。

webgl的一些其他需求

webgl改模板

先按照这个链接获取默认模板,然后需要拥有一定的js知识来修改index.html
这里我的需求是移除进度条和移动端提示,所以改两个地方即可:
unity webgl优化,C#,心得,杂谈,unity,webgl,游戏引擎

webgl在移动端横屏

需求:手机浏览器上打开,当手机屏幕旋转为横屏时,网页也能自动旋转,且画面正常。
这个要高版本的unity就可自动实现,最好用2021.3.15f1c1,以下是从2021.3.4更新到其他版本unity的奇怪错误:

更新到2021.3.13
unity webgl优化,C#,心得,杂谈,unity,webgl,游戏引擎
下面这些方法都不行:

  • unity商店上的插件ScreenOrientationWebGL(据说Safari on iOS不能横屏,需要考虑对UI做适配——不能横屏则启用较大的UI)
  • 直接使用unity原生API——Screen.Orientation (不支持WEBGL,因为project setting里面webgl平台没有landscapeLeft这些类类似的选项)
  • github工程UnityWebGLOrientationDetectSample-main

webgl全屏

全屏功能仅在安卓机型起作用,苹果机型不起作用!
(1)在PC全屏,需要改模板,或者改index.html,PC内容全屏:不包含标题栏
油管视频跟着做就行
(2)在移动端全屏,需要通过点击按钮事件触发。这里我是通过在unity的UGUI调用Screen.fullscreen来实现的。查阅资料得知,出于安全考虑,浏览器仅在直接响应用户启动的事件(如鼠标单击或按键)时才允许锁定光标或切换到全屏模式。
unity文档-浏览器全屏介绍

PS:苹果机型横屏会有白边,全屏无效
unity webgl优化,C#,心得,杂谈,unity,webgl,游戏引擎
推荐一个插件,更方便地监听全屏时的回调:unity商店——FullscreenWebGL

webgl性能分析

(1)当然是大家最熟悉的unity profiler了,可以先在编辑器分析一波,然后再发布develop版本,在移动端上也测试一波
(2)PerfDog:好用是好用,贵也是真贵,不愧是我饿厂 使用方式可以在官网查到,这里我分享一下 PerfDog连接苹果手机的方式:

  1. 安装iTune,下载Pefdog
  2. 连接手机,手机打开开发者模式,更新iOS16后,iPhone怎么开启开发者模式?
  3. 选择测试应用即浏览器即可

webgl优化

内容比较多,我上传个文档免费下载吧
本站——UNITY WEBGL的优化心得

总结

总的来说,这次还是学了不少东西,踩坑也踩麻了 也欢迎各位朋友多评论。那么我们下一篇文章再见吧!

参考

unity官方-webgl发布的基本设置
unity官方-webgl包体减小的基本措施
unity官方-各平台纹理压缩建议
梵佬的读写AB包文章
外网大佬的关于URP编辑器中读取AB包粉色的应对脚本
关于webgl包体减小的尝试
水光大佬的webgl发布到阿里云
知乎大佬-webgl一篇比较全面的指南文章来源地址https://www.toymoban.com/news/detail-787038.html

到了这里,关于unity webgl开发踩坑——从开发、发布到优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • unity发布WebGL遇到的坑(持续更新)

    1、unity默认字体在网页中不会显示 解决方法:自己新导入一个字体,使用导入的字体 2、之前打过包并运行过,后面又在unity中进行了修改,重新打包,运行发现还是修改之前的效果,虽然是新包, 解决方法:这是因为网页中有缓存, 点击浏览器右边的三个点,选择设置–隐

    2024年02月12日
    浏览(37)
  • Unity游戏开发客户端面经——性能优化(初级)

    前言:记录了总6w字的面经知识点,文章中的知识点若想深入了解,可以点击链接学习。由于文本太多,按类型分开。这一篇是 性能优化 常问问题总结,有帮助的可以收藏。 性能优化,主要聚焦在 内存、 CPU、GPU 三大方向上。 1.1 详细介绍    Unity内存占用组成 Unity(基本

    2024年03月22日
    浏览(44)
  • Unity发布webgl获取浏览器的URL

    Unity发布webgl之后获取浏览器的url 在unity中创建文件夹 Plugins ,然后添加添加文件 UnityGetBrowserURL.jslib 在Unity中添加代码 场景布局 发布webgl 拷贝到nginx 运行结果 在地址栏输入 Ip:端口号/?serligblsdhroivbaelirbgvkersab , /? 后面是随便打的字符,然后按下enter会刷新网页并重新显示URL,(

    2024年03月20日
    浏览(41)
  • Unity 发布WebGL、去Logo、网络端通信 、本地运行

    以下内容将和大家详细分享 Unity 在 WebGL平台的发布方法、 如何去除unity的Logo和加载界面、 WebGL与网络端通信 、以及 如何在本地运行html。 一、Unity在 WebGL平台的发布方法 1、如下图,选择webgl平台,没安装的点击下载安装。  安装后如图。  选择需要打包的场景,无特殊要求

    2024年02月06日
    浏览(32)
  • Unity减少发布打包文件的体积(二)——设置WebGL发布时每张图片的压缩方式

    一个项目在发布成WebGL后,其体积至关重要,体积太大,用户加载会经历一个漫长的等待…轻则骂娘,重则用脚把电脑踢烂(扣 质 保 金 )… 那么如何减少发布后的体积呢,本文从图片的压缩开始入手。 前传回顾: Unity减少发布打包文件的体积(一)——获取精灵图片的信息限

    2024年02月04日
    浏览(31)
  • Unity打包WebGL的优化常用操作?

    如果贴图格式时2048,在不影响画面效果的情况下,改成1024或者5#12,还可以缩小包体。 WebGL打包的时候分三种压缩情况: gzip:比Brotli文件打,但打包快,http和https都支持 Brotli:压缩格式最小,打包慢,只有谷歌和火狐支持。 Disabled:不压缩。 直接打包一份不压缩的版本,在

    2024年02月06日
    浏览(37)
  • 基于Unity+Vue3通信交互的WebGL项目发布实践

    问题背景 我们最近需要把unity开发的pc项目迁移到web端,因为unity支持发布webgl。所以按照以往的开发流程,都是项目开发完成就发布webgl部署到服务器。 突然有一天,测试人员提出说为什么我们做的网页跟别人的不太一样呢?具体看下面两张图: 1、unity使用ugui做的界面发布

    2024年04月17日
    浏览(39)
  • 【Unity】3D贪吃蛇游戏制作/WebGL本地测试及项目部署

    本文是Unity3D贪吃蛇游戏从制作到部署的相关细节 项目开源代码:https://github.com/zstar1003/3D_Snake 试玩链接:http://xdxsb.top/Snake_Game_3D 效果预览: 试玩链接中的内容会和该效果图略有不同,后面会详细说明。 经典贪吃蛇游戏:蛇身随着吃食物的增加不断变长,通过A/D或方向键←→

    2024年02月07日
    浏览(35)
  • Unity使用 Addressables 预加载所有资源,提现加载资源,发布webgl加载缓慢问题

    Addressables 我也是刚接触,知道的不是很多,基本的用法还是知道一些的 1 .在Window–Package Manager里找到Addressables进行安装   2.选择资源,点击Assets中的一个资源,在Inspector面板上就会出现一个勾选Assressable,也就是是否加入资源打包的分组,和AssetBundle分组是一个性质。选上以

    2023年04月08日
    浏览(36)
  • Unity: WebGL发布后在浏览器上运行时窗口大小自适应

     这个效果是根据19:6(也就是1920:1080的页面大小来设计的) 整体来说修改以下两个文件来进行达成效果预览,第一个是index.html、第二个是TemplateData文件下的style.css文件 修改对比  其中上图一段注释的脚本是webgl进入全屏状态的的脚本,就是显示下图的脚本(去掉就不显示

    2024年02月16日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包