Unity3D学习之Lua热更新解决方案(一)AB包和LUA语法

文章目录

  • [1. 前言](#1. 前言)
  • [2 AB包理论基础](#2 AB包理论基础)
    • [2.1 生成AB包](#2.1 生成AB包)
    • [2.2 AB包资源加载](#2.2 AB包资源加载)
      • [2.2.1 同步加载](#2.2.1 同步加载)
      • [2.2.2 异步加载](#2.2.2 异步加载)
    • [2.3 AB包依赖](#2.3 AB包依赖)
      • [2.3.1 主包](#2.3.1 主包)
    • [2.4 AB包资源管理器(同步加载)](#2.4 AB包资源管理器(同步加载))
      • [2.4.1 加载AB包](#2.4.1 加载AB包)
      • [2.4.2 加载资源(不指定类型)](#2.4.2 加载资源(不指定类型))
      • [2.4.3 资源加载(指定类型)](#2.4.3 资源加载(指定类型))
      • [2.4.4 卸载包](#2.4.4 卸载包)
    • [2.5 AB包资源管理器(异步加载)](#2.5 AB包资源管理器(异步加载))
  • [3 Lua](#3 Lua)
    • [3.1 环境搭建](#3.1 环境搭建)
    • [3.2 LUA脚本和语法](#3.2 LUA脚本和语法)
      • [3.2.1 打印和注释](#3.2.1 打印和注释)
      • [3.2.2 简单变量类型](#3.2.2 简单变量类型)
      • [3.2.3 字符串操作](#3.2.3 字符串操作)
      • [3.2.4 运算符(没有复合运算!)](#3.2.4 运算符(没有复合运算!))
      • [3.2.5 条件分支语句](#3.2.5 条件分支语句)
      • [3.2.6 循环语句](#3.2.6 循环语句)
      • [3.2.7 函数(变长,嵌套闭包,多返回值)](#3.2.7 函数(变长,嵌套闭包,多返回值))
      • [3.2.8 table表实现数组](#3.2.8 table表实现数组)
      • [3.2.9 迭代器遍历(ipairs和pairs区别)](#3.2.9 迭代器遍历(ipairs和pairs区别))
      • [3.2.10 table表实现字典](#3.2.10 table表实现字典)
      • [3.2.11 table表实现类(点和冒号的区别,self)](#3.2.11 table表实现类(点和冒号的区别,self))
      • [3.2.12 table表的公共操作(插入,移除,排序,拼接)](#3.2.12 table表的公共操作(插入,移除,排序,拼接))
      • [3.2.13 多脚本执行(require,package,_G)](#3.2.13 多脚本执行(require,package,_G))
      • [3.2.14 特殊用法(多变量赋值,三目运算符)](#3.2.14 特殊用法(多变量赋值,三目运算符))
      • [3.2.15 协同程序](#3.2.15 协同程序)
      • [3.2.16 元表(__index,tostring,newindex)](#3.2.16 元表(__index,tostring,newindex))
      • [3.2.17 Lua面向对象之封装](#3.2.17 Lua面向对象之封装)
      • [3.2.18 Lua面向对象之继承](#3.2.18 Lua面向对象之继承)
      • [3.2.19 Lua面向对象之多态](#3.2.19 Lua面向对象之多态)
      • [3.2.20 面向对象总结](#3.2.20 面向对象总结)
      • [3.2.21 自带库](#3.2.21 自带库)
      • [3.2.22 垃圾回收](#3.2.22 垃圾回收)

1. 前言

2 AB包理论基础

AssetBundle



2.1 生成AB包

AssetBundles-Browser-master

关于AB包打包和加载 ,高版本的将使用最新的Addressables进行

这里使用AssetBundles-Browser-master

2.2 AB包资源加载

2.2.1 同步加载






2.2.2 异步加载

使用协程


2.3 AB包依赖

在包中的资源如果使用了另一个资源,打包会默认打包到同一个AB包

如果在AB中使用了另一个AB包中的资源,会出现丢失。需要把依赖包都加载才能正常允许。

2.3.1 主包

可以通过主包获取依赖信息

2.4 AB包资源管理器(同步加载)

2.4.1 加载AB包



2.4.2 加载资源(不指定类型)

泛型加载

2.4.3 资源加载(指定类型)

2.4.4 卸载包


2.5 AB包资源管理器(异步加载)


泛型

3 Lua

3.1 环境搭建

判断是否

3.2 LUA脚本和语法

3.2.1 打印和注释

打印

print("")

注释


3.2.2 简单变量类型




type()可以获取变量类型

3.2.3 字符串操作










3.2.4 运算符(没有复合运算!)







3.2.5 条件分支语句



LUA中没有switch

3.2.6 循环语句







3.2.7 函数(变长,嵌套闭包,多返回值)








多返回值时,在前面申明多个变量来接取即可










闭包:改变参数的生命周期


3.2.8 table表实现数组

Lua中索引从1开始





3.2.9 迭代器遍历(ipairs和pairs区别)






3.2.10 table表实现字典












3.2.11 table表实现类(点和冒号的区别,self)





访问类中成员变量


LUA提供了语法糖方便访问成员变量

用冒号:默认把调用者作为第一个参数传入函数

在函数声明的时候可以使用冒号,意思是函数会有一个默认的参数

LUA有一个默认值self,表示默认传入的第一个参数


这两句的效果是一样的

3.2.12 table表的公共操作(插入,移除,排序,拼接)









3.2.13 多脚本执行(require,package,_G)

加了local就是局部变量(本地变量)










可以在脚本中return


3.2.14 特殊用法(多变量赋值,三目运算符)







3.2.15 协同程序














3.2.16 元表(__index,tostring,newindex)















一层一层往上套




3.2.17 Lua面向对象之封装





3.2.18 Lua面向对象之继承







3.2.19 Lua面向对象之多态



装父类的base

调用父类方法

这样调用base时用的是同一个父类

手动调用self,这样base就不会是同一个

3.2.20 面向对象总结

lua 复制代码
--面向对象实现 
--万物之父 所有对象的基类 Object
--封装
Object = {}
--实例化方法
function Object:new()
	local obj = {}
	--给空对象设置元表 以及 __index
	self.__index = self
	setmetatable(obj, self)
	return obj
end
--继承
function Object:subClass(className)
	--根据名字生成一张表 就是一个类
	_G[className] = {}
	local obj = _G[className]
	--设置自己的"父类"
	obj.base = self
	--给子类设置元表 以及 __index
	self.__index = self
	setmetatable(obj, self)
end

--申明一个新的类
Object:subClass("GameObject")
--成员变量
GameObject.posX = 0
GameObject.posY = 0
--成员方法
function GameObject:Move()
	self.posX = self.posX + 1
	self.posY = self.posY + 1
end

--实例化对象使用
local obj = GameObject:new()
print(obj.posX)
obj:Move()
print(obj.posX)

local obj2 = GameObject:new()
print(obj2.posX)
obj2:Move()
print(obj2.posX)

--申明一个新的类 Player 继承 GameObject
GameObject:subClass("Player")
--多态 重写了 GameObject的Move方法
function Player:Move()
	--base调用父类方法 用.自己传第一个参数
	self.base.Move(self)
end
print("****")
--实例化Player对象
local p1 = Player:new()
print(p1.posX)
p1:Move()
print(p1.posX)

local p2 = Player:new()
print(p2.posX)
p2:Move()
print(p2.posX)

3.2.21 自带库





3.2.22 垃圾回收


相关推荐
云空3 分钟前
《解锁 Python 数据挖掘的奥秘》
开发语言·python·数据挖掘
HSunR3 分钟前
概率论 期末 笔记
笔记·概率论
青莳吖14 分钟前
Java通过Map实现与SQL中的group by相同的逻辑
java·开发语言·sql
红色的山茶花14 分钟前
YOLOv9-0.1部分代码阅读笔记-loss_tal.py
笔记·深度学习·yolo
Buleall21 分钟前
期末考学C
java·开发语言
重生之绝世牛码23 分钟前
Java设计模式 —— 【结构型模式】外观模式详解
java·大数据·开发语言·设计模式·设计原则·外观模式
小蜗牛慢慢爬行29 分钟前
有关异步场景的 10 大 Spring Boot 面试问题
java·开发语言·网络·spring boot·后端·spring·面试
Algorithm157639 分钟前
云原生相关的 Go 语言工程师技术路线(含博客网址导航)
开发语言·云原生·golang
shinelord明1 小时前
【再谈设计模式】享元模式~对象共享的优化妙手
开发语言·数据结构·算法·设计模式·软件工程
Monly211 小时前
Java(若依):修改Tomcat的版本
java·开发语言·tomcat