互联网网站排名,整人网站建设,小程序注册申请流程图,做电子的外单网站有哪些的Lua的学习
table.concat(tb,;)
如果表里带表#xff0c;则不能拼接#xff0c;表里带nil也不能#xff0c;都会报错
true和false也不可以#xff0c;数字和字符串可以 if要和一个end配对#xff0c;所以
if ab then
return true
end
end
两个end …Lua的学习
table.concat(tb,;)
如果表里带表则不能拼接表里带nil也不能都会报错
true和false也不可以数字和字符串可以 if要和一个end配对所以
if ab then
return true
end
end
两个end ctrlb运行脚本 函数在表外部声明的时候要带表的名字.函数名 带:声明函数的时候在函数内部可以用self表示自己从而调用自己这个表的成员 不存在表内用的就是自己里面的变量一样要.出来确认
lua 的表不可以.访问数字
这种pair遍历写法看上去只遍历值实际上还是拿了键放下划线了 不删除直接访问没有的那个键也是会得到nil lua中字典的添加和修改
直接赋值和直接修改 pairs不按正常顺序的最后会统一去找 这样空的索引区域会设置成nil
#aa会输出6这里只跳一格还可以不断 lua可以自定义索引这里的两个print都可以打印出来1,4 lua中的数组下标从一开始 变长参数先用表接{}再for#表使用 这里改变了x的生命周期一直存在于functiony里面 nil不支持..拼接 true flase不能..拼接 and or not 不等于~ 取余对小数也可以取余 各个不同的类型都可以用..连接 打包减少硬盘资源占用
打包后可以减少的硬盘占用取决于以下几个因素 1. 资源的重复引用
在未打包的情况下Unity 项目中有很多资源可能会被多个场景或 Prefab 反复引用比如材质、纹理、模型等。这些资源存储在磁盘上的多个文件中各自占用独立的空间。
打包后的优化
Unity 的 AssetBundle 或 Addressable 系统会对这些重复的资源进行分析提取到共享的 AssetBundle 中。磁盘上的重复数据大幅减少。
占用减少程度
效果显著尤其是大规模项目中重复资源较多时可能减少 10%-30% 的硬盘占用。 2. 文件格式的优化
Unity 项目中很多原始资源如 PNG、JPG、FBX都保持未压缩或源格式存储打包时会进行格式转换和压缩处理。例如
纹理资源可能被压缩为 ETC、DXT 等格式。模型资源只保存运行时必要的顶点、法线数据移除编辑器使用的信息。声音资源通常会压缩为 ADPCM 或其他高效编码格式。
占用减少程度
纹理和声音资源的压缩会带来显著效果可能减少 20%-50% 的空间。模型资源通常减少较少约 10%-20%。 3. 剔除未使用的资源
Unity 在打包时会剔除未被引用的资源这些资源在开发时可能仍保存在 Assets 文件夹中但不会包含在最终的打包文件中。
占用减少程度
如果你的项目中有大量未使用的资源可能减少 10%-40% 的硬盘占用。 4. 压缩级别
打包后的文件通常会使用压缩算法进一步优化磁盘占用。常见的压缩方式包括
LZ4 压缩更快加载稍大文件体积。LZMA 压缩更小文件体积但加载速度稍慢。
占用减少程度
如果启用 LZMA 压缩打包文件大小可能减少 30%-50%。 综合实际案例分析
假设一个项目如下
原始项目文件夹大小10 GB包含大量纹理、声音和模型资源。纹理占用 5 GB其中 3 GB 可压缩。声音占用 2 GB50% 可压缩。1 GB 的未使用资源。
打包后可能的结果
纹理压缩3 GB 压缩至 1 GB节省 2 GB。声音压缩2 GB 压缩至 1 GB节省 1 GB。未使用资源剔除减少 1 GB。文件重复引用优化减少约 1 GB。压缩最终减少约 20%。
最终打包后大小 10 GB 原始文件 - 约 5-6 GB 如何进一步优化打包占用
纹理压缩设置在 Texture Import Settings 中选择适合目标平台的压缩格式如 ASTC、ETC2。声音格式优化将声音资源压缩为高效格式如 ADPCM。清理未使用资源使用 Unity 的 Asset Usage 检查工具找出未被引用的资源并移除。分包设计将资源划分为按需加载的多个 AssetBundle避免一次性加载过多资源。
依赖
在 Unity 中依赖关系通常指的是一个资源如场景、Prefab引用了另一个资源如材质、纹理、脚本等。如果一个资源依赖另一个资源那么在加载前者时后者必须先加载到内存中。 依赖简单来说是指一个资源在使用时需要另一个资源的支持。
想象你要玩一个游戏这个游戏的关卡是 Level1而这个关卡中有一个大炮模型 CannonPrefab。
如果把 Level1 比喻成一本书CannonPrefab 就是书里的插图。当你打开书时插图必须已经准备好否则书里的某些内容就没法展示了。
这就意味着Level1 依赖 于 CannonPrefab。
假设 Level1 和 Level2 都用到了 CannonPrefab。 如果没有依赖管理 Unity 会把 CannonPrefab 的完整数据分别放进 Level1 和 Level2 的 AB 包中导致文件变大、加载时占用内存多。 如果有依赖管理 Unity 会把 CannonPrefab 提取到一个独立的 CommonAssets 包中Level1 和 Level2 的 AB 包中只存放对 CannonPrefab 的引用。
加载顺序是
加载 CommonAssets 包加载 CannonPrefab。加载 Level1 或 Level2并使用已经加载的 CannonPrefab。
AssetBundle 是 Unity 中的资源打包机制依赖是它的重要部分
Unity 会分析每个 AB 包中的资源检测哪些资源被多个 AB 包使用。这些共享资源会被提取到独立的 AB 包中。生成的 .manifest 文件会记录每个 AB 包的依赖关系。
using UnityEditor;public class AssetBundleBuilder
{[MenuItem(Build/Build AssetBundles)]static void BuildAllAssetBundles(){// 创建 AB 包的输出路径string assetBundleDirectory Assets/AssetBundles;if (!System.IO.Directory.Exists(assetBundleDirectory)){System.IO.Directory.CreateDirectory(assetBundleDirectory);}// 设置独立打包规则AssetBundleBuild[] buildMap new AssetBundleBuild[3];// Level1 打包buildMap[0].assetBundleName level1;buildMap[0].assetNames new string[] { Assets/Scenes/Level1.unity };// Level2 打包buildMap[1].assetBundleName level2;buildMap[1].assetNames new string[] { Assets/Scenes/Level2.unity };// CannonPrefab 打包为公共资源buildMap[2].assetBundleName commonassets;buildMap[2].assetNames new string[] { Assets/Prefabs/CannonPrefab.prefab };// 构建 AB 包BuildPipeline.BuildAssetBundles(assetBundleDirectory, buildMap, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);}
}装Lua之后会一起安装一个东西 cmd去check outprint Lua 公司一般会帮把IDE环境搭好所以如果是要学习Lua的话IDE可以任意 PlayerPrefs 数据存储路径
Windows
编辑器环境 路径%APPDATA%\Unity\EditorPrefsBuild 后的游戏 路径%USERPROFILE%\AppData\LocalLow\CompanyName\ProductName\ CompanyName 和 ProductName 为 PlayerSettings 中设置的公司名称和产品名称。
AB 包AssetBundle
使用需要在unity里先添加assetbundle browser插件pack Manager那
减小初始包体积 通过将部分资源分离成 AB 包玩家首次下载时只需要获取核心内容其他资源可以在需要时下载。例如一款游戏有多个关卡玩家只需下载第一个关卡的资源后续关卡可以按需加载。 支持热更新
更新游戏时只需替换 AB 包而无需重新打包整个游戏大大减少更新包的大小。例如网游中增加新角色时只需下载新角色的资源包而不必重新下载整个客户端。
跨平台共享
将资源打包为 AB 包后不同平台可以复用相同的资源而不需要为每个平台生成独立的资源版本。 先为要打ab包的资源指定包名
编写脚本在运行时加载 AB 包中的图片并显示在场景中。
using UnityEngine;
using UnityEngine.UI; // 如果需要将图片显示在 UI 上public class LoadAssetBundle : MonoBehaviour
{public string bundlePath Assets/StreamingAssets/example_bundle; // AB 包路径public string assetName example_texture; // 图片资源名称public RawImage targetImage; // 场景中的 UI 元素用于显示图片void Start(){LoadTextureFromBundle();}void LoadTextureFromBundle(){// 加载 AB 包AssetBundle bundle AssetBundle.LoadFromFile(bundlePath);if (bundle null){Debug.LogError(Failed to load AssetBundle!);return;}// 加载资源Texture2D texture bundle.LoadAssetTexture2D(assetName);if (texture ! null){targetImage.texture texture; // 显示图片在 UI 上}// 卸载 AB 包释放内存bundle.Unload(false);}
}图片的名字assetName仍然是它在项目中的原始名字
AB 包并不会改变资源本身的名称而是会将资源的路径和名称记录在 AB 包的元数据中 ab包的资源依赖 unload单个ab包的资源 作用是卸载所有的ab包资源后面的true和false则决定要不要把ab包加载出的资源也一起删了
最好是填false
比如过场景的时候使用卸载 转热更新 转进阶 everythings gonna be fine