# WebGL Framework Unity3D **Repository Path**: xiaobaichong/web-glbuild-framework ## Basic Information - **Project Name**: WebGL Framework Unity3D - **Description**: 这是一个Unity WebGL 项目框架 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2024-06-24 - **Last Updated**: 2025-03-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: Unity ## README # Unity WebGL 优化构建方案 ## Assets 目录结构 + AddressableAssetsData:可寻址系统设置文件和用于跟踪可寻址设置的其他资源。 + AssetBundle:AB包资源存放路径 + Character Controller:角色控制器 + Font:字体文件目录 + Main:主要脚本组件 + Plugins:存放不同平台用到的代码库 + Resources:动态加载资源目录(和主包打在一起) + Scenes:场景目录 + Scripts:脚本目录 + StreamingAssets:流媒体资源目录 + UI:UI素材目录 + WebGLTemplates:自定义WebGL模板 ## AddressableAssets 配置 打包和加载路径为`Application.streamingAssetsPath/AssetBundle`。 打包WebGL路径`Application.streamingAssetsPath`则为你当前路由路径内的`StreamingAssets`所在路径,类似`http://localhost/StreamingAssets` ![alt text](README/image.png) - 中括号:AddressableAssetSettings 会直接去该路径值为最终路径,后续路径不变。 - 大括号:AddressableAssetSettings 不会直接计算路径,而是在用的的时候去计算路径,后续路径是可变的。 ![alt text](README/image-1.png) 可寻址系统组的配置对应`Assets/AssetBundle`目录,可将对应目录资产下的所有拖入对应组中。 ![alt text](README/image-2.png) **注意:** 既然将`Assets/AssetBundle`目录作为运程加载资源目录,就不应该将其包含在主包内,所以不应该在主包内用到。 可寻址系统组的配置的详细配置这里就不介绍了,一般保持默认即可,也可查看[官网](https://docs.unity3d.com/Packages/com.unity.addressables@1.19/manual/index.html)。 ## 分包加载组件(RemotePrefabsConfig) 这里强烈推荐使用[Auto Streaming](https://docs.unity.cn/cn/Packages-cn/com.unity.autostreaming@2.0/manual/)插件包。这里我也不多介绍了,了解一下即可。 这里实现是基于`Addressables`的,通过在场景中配置哪些需要后期自动加载的预制件,保持在组件内并将这些预制件拖放在`Addressables Groups`中的`Prefabs`组中,记得构建出去的时候需要将场景内需要远程加载的预制件移除掉,不然会打包在主包内,反而起到了反作用。 ![alt text](README/image-3.png) **更新配置** 会查找子节点下的所有预制件,并保存在组件内。 **清空配置** 会将组件内保持的配置数据清空。 **移除预制件实例化** 将会将子节点下的所有预制件移除,防止在主包内用到。 **还原预制件实例化** 会还原配置中的所有数据并实例化预制件,可还原场景。 该组件主要用于减少主包大小提升加载速度,并不能减少内容用量。 如果打包手机端,对于大场景建议拆分为多个小场景,较少内存用量。 ## 使用 [Occlusion Culling](https://docs.unity.cn/cn/2021.3/Manual/OcclusionCulling.html) 遮挡剔除”过程可防止 Unity 为那些被其他游戏对象完全挡住(遮挡)的游戏对象执行渲染计算。