自由学习记录(23)
Lua的学习
table.concat(tb,";")
如果表里带表,则不能拼接,表里带nil也不能,都会报错
true和false也不可以,数字和字符串可以

if要和一个end配对,所以
if a>b then
return true
end
end
两个end

ctrl+b运行脚本


函数在表外部声明的时候要带表的名字.函数名

带:声明函数的时候,在函数内部可以用self表示自己,从而调用自己这个表的成员

不存在表内用的就是自己里面的变量,一样要.出来确认


lua 的表不可以.访问数字
这种pair遍历写法看上去只遍历值,实际上还是拿了键放下划线了


不删除,直接访问没有的那个键,也是会得到nil

lua中字典的添加和修改
直接赋值,和直接修改



pairs不按正常顺序的最后会统一去找



这样空的索引区域会设置成nil
#aa会输出6(这里只跳一格,还可以不断)

lua可以自定义索引,这里的两个print都可以打印出来,1,4

lua中的数组下标从一开始

变长参数先用表接{},再for#表使用

这里改变了x的生命周期,一直存在于function(y)里面



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 GB,50% 可压缩。
- 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 out,print Lua

公司一般会帮把IDE环境搭好,所以如果是要学习Lua的话,IDE可以任意


PlayerPrefs 数据存储路径
Windows
- 编辑器环境:
- 路径:
%APPDATA%\Unity\EditorPrefs
- 路径:
- Build 后的游戏:
- 路径:
%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.LoadAsset<Texture2D>(assetName);if (texture != null){targetImage.texture = texture; // 显示图片在 UI 上}// 卸载 AB 包,释放内存bundle.Unload(false);}
}
图片的名字(assetName)仍然是它在项目中的原始名字
AB 包并不会改变资源本身的名称,而是会将资源的路径和名称记录在 AB 包的元数据中
ab包的资源依赖

unload单个ab包的资源,

作用是卸载所有的ab包资源,后面的true和false则决定要不要把ab包加载出的资源也一起删了
最好是填false
比如过场景的时候使用卸载

转热更新

转进阶

everything's gonna be fine
相关文章:
自由学习记录(23)
Lua的学习 table.concat(tb,";") 如果表里带表,则不能拼接,表里带nil也不能,都会报错 true和false也不可以,数字和字符串可以 if要和一个end配对,所以 if a>b then return true end end 两个end …...
Java语言程序设计 选填题知识点总结
第一章 javac.exe是JDK提供的编译器public static void main (String args[])是Java应用程序主类中正确的main方法Java源文件是由若干个书写形式互相独立的类组成的Java语言的名字是印度尼西亚一个盛产咖啡的岛名Java源文件中可以有一个或多个类Java源文件的扩展名是.java如果…...
鸿蒙生态:开发者的新蓝海与挑战
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
4.3 MySQL 存储函数
存储函数是一种数据库对象,允许用户将常用的 SQL 逻辑封装为可复用的函数,通过调用函数完成特定的计算或业务逻辑。 1. 简介 1.1 什么是存储函数 存储函数(Stored Function)是用户定义的一段 SQL 逻辑,返回一个值&am…...
【Python刷题】动态规划相关问题
动态规划(Dynamic Programming,简称 DP)是一种用于解决多阶段决策最优化问题的算法策略。它通过把原问题分解为相对简单的子问题,记录子问题的解(通常使用表格等数据结构存储),避免重复计算&…...
2024年9月中国电子学会青少年软件编程(Python)等级考试试卷(六级)答案 + 解析
一、单选题 1、下面代码运行后出现的图像是?( ) import matplotlib.pyplot as plt import numpy as np x np.array([A, B, C, D]) y np.array([30, 25, 15, 35]) plt.bar(x, y) plt.show() A. B. C. D. 正确答案:A 答案…...
论文阅读:SIMBA: single-cell embedding along with features
Chen, H., Ryu, J., Vinyard, M.E. et al. SIMBA: single-cell embedding along with features. Nat Methods 21, 1003–1013 (2024). 论文地址:https://doi.org/10.1038/s41592-023-01899-8 代码地址:https://github.com/pinellolab/simba. 摘要 大多…...
d3-quadtree 的属性、方法、示例
D3.js 的 d3-quadtree 模块提供了用于构建二维空间索引的数据结构,即四叉树(Quadtree)。四叉树可以高效地存储和查询大量点数据。下面列出了 d3-quadtree 的主要属性和方法,并提供了一个简单的 Vue 组件示例,展示如何使…...
初次体验加猜测信息安全管理与评估国赛阶段训练习
[第一部分] 网络安全事件响应 window操作系统服务器应急响应流程_windows 服务器应急响应靶场_云无迹的博客-CSDN博客 0、请提交攻击者攻击成功的第一时间,格式:YY:MM:DD hh:mm:ss1、请提交攻击者的浏览器版本2、请提交攻击者目录扫描所使用的工具名称…...
在WSUS中删除更新
WSUS中更新的管理逻辑 如果你探索过WSUS控制台界面,就会发现WSUS只给你提供了批准(Approve)和拒绝(Decline)更新的选项,并无办法删除更新。 如果你去WSUS服务器清理导向(WSUS Server Cleanup …...
5分钟轻松搭建Immich图片管理软件并实现公网远程传输照片
文章目录 前言1.关于Immich2.安装Docker3.本地部署Immich4.Immich体验5.安装cpolar内网穿透6.创建远程链接公网地址7.使用固定公网地址远程访问 前言 本篇文章介绍如何在本地搭建lmmich图片管理软件,并结合cpolar内网穿透实现公网远程访问到局域网内的lmmich&#…...
数据集-目标检测系列- 昙花(昙花一现) 检测数据集 epiphyllum >> DataBall
数据集-目标检测系列- 昙花(昙花一现) 检测数据集 epiphyllum >> DataBall DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集,持续增加中。 贵在坚持! 数据样例项目地址: * 相关…...
开源POC库推荐
声明 学习视频来自 B 站UP主泷羽sec,如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。 ✍🏻作者简介:致…...
vue3项目部署在阿里云轻量应用服务器上
文章目录 概要整体部署流程技术细节小结 概要 vue3前端项目部署在阿里云轻量服务器 整体部署流程 首先有一个Vue3前端项目和阿里云应用服务器 确保环境准备 如果是新的服务器,在服务器内运行以下命令更新软件包 sudo apt update && sudo apt upgrade -y …...
javascrip页面交互
元素的三大系列 offset系列 offset初相识 offset系列属性 作用 element.offsetParent 返回作为该元素带有定位的父级元素,如果父级没有定位,则返回body element.offsetTop 返回元素相对于有定位父元素上方的偏移量 element.offsetLeft 返回元素…...
【U盘车载音乐】某宝198的3068首车载专用音乐合集【高音质】24G
「【U盘车载音乐】某宝198的3068首车载专用音乐合集【高音质】24G」 复制下方口令,打开最新版「夸克APP」即可获取保存(防止和谐!!!) 口令: 动作懿范鉴真渡多好备用口令: /~19dc35…...
【论文阅读】WGSR
0. 摘要 0.1. 问题提出 1.超分辨率(SR)是一个不适定逆问题,可行解众多。 2.超分辨率(SR)算法在可行解中寻找一个在保真度和感知质量之间取得平衡的“良好”解。 3.现有的方法重建高频细节时会产生伪影和幻觉,模型区分图像细节与伪影仍是难题。 0.2. …...
打造智能化在线教育平台详解:教培网校APP的架构设计与实现
本篇文章,小编将以教培网校APP的架构设计与实现为核心,深入探讨如何打造一套智能化的在线教育平台,为企业和教育机构提供落地参考。 一、在线教育平台的核心功能需求 构建一个高效的教培网校APP,首先需要明确其核心功能需求。一…...
使用同一个链接,如何实现PC打开是web应用,手机打开是一个H5应用
当我们希望通过同一个 URL,根据访问设备展示不同的页面时,可以选择以下几种方法: 方法一:通过 User-Agent 前端判断设备类型并跳转 利用前端 JavaScript 获取浏览器的 User-Agent 字符串,判断设备类型,跳转…...
STM32-- 调试 -日志输出
在调试嵌入式程序时,输出日志是非常重要的环节,可以帮助开发者定位问题、监控程序状态和性能。以下是几种常见的日志输出方式及其适用场景: 1. 使用串口(UART)输出日志 实现方式: 通过串口将日志输出到主…...
2026年,亳州钢筋网片厂家有何亮点?
在建筑行业蓬勃发展的当下,钢筋网片作为建筑施工中不可或缺的材料,其质量和供应能力直接影响着工程的质量和进度。2026年,亳州的钢筋网片市场竞争激烈,其中安平县齐宇丝网制品有限公司(以下简称“齐宇公司”࿰…...
UE4实战:利用VaRest与VictoryBPLibrary实现高效本地文件读写
1. 为什么需要本地文件读写 在虚幻引擎4开发过程中,我们经常需要保存游戏配置、玩家进度或者关卡数据。想象一下你正在开发一个RPG游戏,需要记录玩家背包里的所有物品、当前任务进度和角色属性。如果每次退出游戏这些数据都消失,玩家肯定会抓…...
基于SpringBoot + Vue的校园流浪动物救助平台
文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 💛博主介绍&#…...
Linux环境下Oracle 19C补丁安装保姆级教程:从下载到验证的完整流程
Linux环境下Oracle 19C补丁安装全流程实战指南 在数据库运维工作中,补丁管理是确保系统安全稳定运行的关键环节。Oracle 19C作为当前长期支持版本,其补丁安装过程虽然标准化程度高,但实际操作中仍存在不少容易踩坑的细节。本文将基于实战经验…...
高效掌握多步提示工程:进阶AI任务处理的系统方法论
高效掌握多步提示工程:进阶AI任务处理的系统方法论 【免费下载链接】LangGPT LangGPT: Empowering everyone to become a prompt expert! 🚀 📌 结构化提示词(Structured Prompt)提出者 📌 元提示词&#x…...
从HBM到IEC61000-4-2:解码三大ESD模型在芯片与整机设计中的关键分野
1. 为什么你的芯片还是被静电打坏了? 很多硬件工程师都有过这样的困惑:明明选用的芯片数据手册上明确标注了"ESD防护等级2000V",为什么产品到客户手里还是频繁出现静电损坏?上周我就遇到一个真实案例——某智能门锁厂商…...
PyTorch 3.0 DDP + torch.compile混合训练面试通关手册:涵盖Graph Break诊断、Shard策略冲突、以及3种反模式现场复现
第一章:PyTorch 3.0 静态图分布式训练面试概览PyTorch 3.0 并非官方发布版本(截至2024年,PyTorch最新稳定版为2.3),但“PyTorch 3.0”在面试语境中常被用作一种假设性技术命题,用于考察候选人对静态图编译、…...
Proteus仿真实战:基于STM32的智能环境感知与联动控制系统(附源码)
1. 项目背景与核心功能 想象一下这样的场景:当你走进书房时,灯光自动亮起;当室内温度过高时,空调自动开启;当光线不足时,窗帘缓缓拉开。这些看似科幻的场景,其实用STM32单片机和Proteus仿真就能…...
2026年Java面试最常被问的1000道题目及参考答案
Java学到什么程度可以面试工作? 要达到能够面试Java开发工作的水平,需要掌握以下几个方面的知识和技能: 1. 基础扎实:熟悉Java语法、面向对象编程概念、异常处理、I/O流等基础知识。这是所有Java开发者必备的基础,也…...
智能转换驱动科研效率:DeTikZify重构学术图表自动化新范式
智能转换驱动科研效率:DeTikZify重构学术图表自动化新范式 【免费下载链接】DeTikZify Synthesizing Graphics Programs for Scientific Figures and Sketches with TikZ 项目地址: https://gitcode.com/gh_mirrors/de/DeTikZify 在科研成果可视化的关键环节…...

