Unity游戏开发客户端Lua基础

Unity游戏开发客户端面经——热更新(初级) Unity游戏开发客户端面经 之 热更新 篇 阅读详情

前言:记录了总6w字的知识点,文章中的知识点若想深入了解,可以点击链接学习。由于文本太多,按类型分开。这一篇是lua常问问题总结,有帮助的可以收藏。


1.pairs与ipairs区别

        两者都是用迭代器实现

pairs:

        pairs会遍历所有key,对于key的类型没有要求,遇到nil时可以跳过,不会影响后面的遍历,既可以遍历数组部分,又能遍历哈希部分,但是不保证遍历顺序,因为Lua的表是无序的。

         源码解析:
function pairs(t)
    return next, t, nil
end

   pairs 是一个更通用的迭代器生成器,用于遍历表中的所有键值对。它利用了Lua的内置函数 next,该函数会返回表中下一个键值对。

  • pairs 返回三个值:next 函数、表 t 和初始键 nil。
  • next 函数会从表中返回下一个键值对,直到没有更多的键值对。

ipairs:

        ipairs只会从1开始,步进1,只能遍历数组部分, 中间不是数字的key忽略, 到第一个不连续的数字为止(不含),遍历时只能取key为整数值,遇到nil时终止遍历。

     源码解析:
function ipairs(t)
    return function(t, i)
        i = i + 1
        local v = t[i]
        if v == nil then
            return nil, nil
        end
        return i, v
    end, t, 0
end
  • 这个实现中,ipairs 返回一个迭代器函数、表 t 和初始索引 0。

  • 迭代器函数每次调用时,会将索引 i 加1,并检查表中该索引的值是否为 nil。如果值为 nil,则停止迭代。

local t2 = { 1, 2, [3] = 10, 3, 4}

for i, v in ipairs(t2) do
    print(i, v)
end

Output:

1    1
2    2
3    3
4    4

(在Lua中,表是基于哈希表的,这意味着它们可以存储任何类型的键,而不仅仅是整数。当你使用非连续的索引(如[3] = 10)时,Lua会将这些索引转换为哈希键,以便在表中存储和检索对应的值。)

2.点和冒号区别

区别:

   参数传递:

        点  :用于访问表中的字段或调用表里的函数,不绑定任何特定的上下文对象;调用时,不会自动传递任何参数,如果需要传递参数,必须明确指定。不一定要传递self,根据需求传递,包括但不限于:table,string,function,number,boolean,thread,nil。传递的参数为方法里面的self。

        冒号 :用于调用表中的方法,并且会自动将表本身作为第一个参数对下传给该方法。调用时,会自动将表本身作为第一个参数传递给方法。

   调用时机:

        点:适用于访问表的字段或者调用普通函数,不涉及上下文。

    冒号:调用一个方法,并且该方法需要访问对象的字段或状态。

       

3.Lua如何实现面向对象

继承:

        Lua面向对象编程是基于元表metatable,元方法__index来实现的。

        通过元表的__index元方法,将一个table的__index元方法设置为另一个table,那么后者的方法就被前者继承。

        如果访问了lua表中不存在的元素时,就会触发lua的一套查找机制,也是凭借这个机制,才能够实现面向对象的。

        总结元表的查找步骤:

        在表中查找该元素,如果找到,返回该元素,找不到则判断该表是否有元表(setmetatable(A,B)     -- 把 B设为 A的元表 ),如果没有元表,返回nil,有元表则判断元表有没有__index方法(不是直接看元表有该元素!),如果__index方法为nil,则返回nil;如果__index方法是一个表,则重复上述步骤;如果__index方法是一个函数,则调用该函数,并返回该函数的返回值。

封装:

        1.lua的表可以同时存储数据和函数,可以实现简单的封装。

        2.闭包隐藏内部状态,只暴露了必要接口,也实现了封装。

        3.通过元表实现类的封装,可以模拟面向对象编程,支持继承。

        4.将相关函数和数据封装在一个模块中,通过模块接口对外提供服务,便于复用和管理。

多态:

        多态本质也是通过元表和表的机制来模拟多态的行为。

        1.动态绑定:将利用元表的__index方法指定一个表后,有了继承关系,重写了父类里面的函数。

        2.方法重载:根据传参类型不同,执行不同的逻辑。

 4.__index 与 __newindex的区别     

     注意:__index 和__newindex归为元表方法。

  __index:

        当子脚本不存在被访问的元素的时候,lua就会调用__index,去父脚本里面查找该元素。

            参数:

                如果__index是一个函数,那么参数是:table:被访问的表;key:被访问的键。

                如果__index是一个表,Lua会在这个表里面查找key对应的值。

  __newindex:

        当赋值时,如果赋值一个不存在的索引。

        如果__newindex是一个表,那么会把这个值赋值到newindex所指的表中(有这个索引就修改,没有就创建),不会修改自己;

        如果__newindex是一个函数,那么会调用这个函数。

            参数:        

       table:被赋值的表。

       key:被赋值的键。

       value:被赋值的值。

代码:

        1.__newindex指定一个函数

        2._

Unity 项目中怎样正确的使用 Lua? ​ 什么是Lua Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。可以方便的与c/c++进行相互调用。但是Unity中主要是用c#进行开发的,因此在Unity中使用Lua通常有以下两种方案: 使用c#实现一个lua虚拟机 基于原生的c lua api做一个封装,让c#调用 阅读详情

相关推荐

Lua全知识点详细汇总(基础知识+面向对象+面试重点)

Lua全知识点汇总(超详细) 文章目录Lua全知识点汇总(超详细)Lua中的注释用法Lua中的变量类型Lua的字符串操作Lua的运算符Lua的条件分支语句Lua的循环语句Lua的Function函数 (含闭包面试重点)Lua的多脚本执行**Lua的Table表**table表的遍历table表的公共方法table表的特殊用法(字典,类)**Lua的元表**概念方法**Lua的面向对象 OOP**封装继承多态OOP汇总代码 面试重点Lua的特殊用法Lua自带库函数Lua的垃圾回收 Lua中的注释用法 单

Q540670228的博客 6095

游戏客户端面试(Unity)

推荐阅读:  我的CSDN  我的博客园  QQ群:704621321 一。最开始的两家公司笔试面试题目       一家

爱上游戏开发 2万+

【Unity】Lua热更新 笔记 (一)

热更新 一、认识更新方式 描述 适用于 原因 传统 重新下载最新游戏客户端包体 PC 耗电大、耗时长 现在 热更新 PC/Andriod/ios 耗时短,适用于手机端 二、什么是热更新 答:  (1)游戏上线后,在运营过过程中,如果需要更换UI显示,或者修改游戏的逻辑行为。传统的更新模式下,需要重新打包游戏,让玩家重新下载包体,造成用户体验不佳的情况。  (2)热更新允许在不重新下载游戏客户端的情况下,更新游戏内容。 三、如何使用更新 答:两种更新方式混合使用。 四、如何热更新 4

Mr.River的博客 3036

C#与Lua热更新架构:原理、实现与Unity游戏开发实践

热更新技术是现代游戏与大型应用开发中的核心工程实践,它允许开发者在无需重新发布客户端安装包的情况下,动态更新应用逻辑与资源。其基本原理在于将稳定的核心框架与需要频繁变动的业务逻辑进行分离,通常采用C#等编译型语言构建底层引擎,而使用Lua等脚本语言实现动态层。这种架构的技术价值在于极大地缩短了版本迭代周期,能够快速修复线上BUG和发布新内容,从而提升用户体验并降低玩家流失风险。在应用场景上,它尤其适用于手游、网游等需要频繁更新和运营的活动型项目。本文将以Unity引擎为例,深入探讨如何通过C#与Lua的组合

weixin_30732487的博客 313

Unity 面试篇|(五)热更新与Lua语言篇 【全面总结 | 持续更新】

热更新 是一种App软件开发者常用的更新方式。简单来说,就是在用户通过下载安装APP之后,打开App时遇到的即时更新。在安卓、iOS平台,热更新表示在更新游戏资源或逻辑的时候不需要开发者将游戏再打包、上传、审核、发布、玩家重新下载安装包更新游戏,仅需要开发者打出新的ab(AssetBundle)资源文件放到网上,然后游戏程序下载新的ab资源文件替换本地的资源文件来实现游戏更新的流程。热更代码可以理解成是特殊的资源。

游戏开发小Y的博客 12万+

Unity Lua热更框架实战指南

Lua是一种轻量级的脚本语言,以其简洁的语法、高效的执行速度和强大的可扩展性在游戏开发领域中获得了广泛应用。在Unity引擎中,Lua通常用作编写游戏逻辑脚本,使得游戏的开发更加灵活和高效。热更新(Hot Update)是指在应用程序或游戏发布后,无需通过应用市场审核和下载安装包的方式,直接从服务器推送新版本到用户设备上,并实现立即生效的技术。它与传统的更新方式相比,极大地提升了用户体验和应用的维护效率。在游戏行业中,热更新尤为重要。

weixin_30248619的博客 1170

Upwork入门指南:如何创建吸引人的个人资料

本文详细介绍了如何在Upwork上创建并优化个人资料,帮助自由职业者吸引更多客户。内容包括: 注册与验证:从注册账号到邮箱验证的完整步骤。 个人资料填写:如何撰写吸引人的标题、简介,选择技能标签,以及设置专业头像和费率。 作品集与优化:上传高质量作品集,提升搜索排名和客户信任度。 常见问题解答:解决新手常见问题,如无工作经验或审核不通过。 通过本文的指导,你将学会打造一个专业且高效的个人资料,为在Upwork上获得更多机会奠定基础。

qq_61813593的博客 3496

灵魂三问:因果推断

什么是因果推断?为什么研究因果推断?怎么进行因果推断研究?

ML OR 智能决策的博客 2896

通过EMIF接口实现FPGA与DSP的高速连接(方法)

请注意,具体的连接细节和步骤可能会根据所使用的FPGA和DSP型号以及特定的应用需求而有所不同。开发DSP和FPGA上的软件,以实现数据交换和处理。根据系统的具体需求,对FPGA和DSP的接口逻辑进行优化,以减少延迟、提高数据吞吐量或降低资源消耗。它通常支持多种类型的存储器,如SRAM、DRAM、ROM等,以及通过特定的接口与FPGA连接。对于FPGA,需要编程来实现与DSP的接口逻辑,包括地址译码、数据传输、时序控制等。在连接完成后,进行详细的调试和测试,以确保数据能够在DSP和FPGA之间正确传输。

AigcFox的博客 4575

大模型训练显存瘦身全记录:从ZeRO-3参数分区到CPU Offload的硬件协奏曲

本文详细解析了如何通过ZeRO-3参数分区与CPU/NVMe卸载技术优化大模型训练的显存使用。结合bf16混合精度与梯度累积等策略,实现在消费级GPU上高效训练百亿参数模型,显著提升硬件利用率与训练效率。

weixin_29051245的博客 426

ICC 实战解析——CTS 时钟树综合中的关键设置与优化策略

本文深入解析ICC工具中CTS时钟树综合的关键设置与优化策略,涵盖时钟树异常引脚设置、目标参数配置、非默认布线规则(NDR)等核心技术。通过实战案例展示如何有效控制时钟偏差、优化信号完整性,并平衡功耗与面积,为芯片物理设计提供专业指导。

weixin_30872577的博客 321

087、DAMO-YOLO Efficient-RepGFPN:重参数化加皇后融合加黄金分割的创新 Neck

DAMO-YOLO的Efficient-RepGFPN创新性Neck结构摘要: 该结构通过三重创新提升目标检测性能: 重参数化卷积:训练时多分支(3x3卷积+1x1卷积+BN分支)提升特征表达能力,推理时合并为单路3x3卷积保证效率; 皇后融合机制:采用可学习权重对不同尺度特征进行自适应加权融合,而非简单相加,通过Softmax归一化权重实现特征选择; 黄金分割连接:优化特征金字塔层间连接方式,按比例分配相邻层特征权重(如P3:P5≈0.618:0.382),减少冗余连接噪声。 实验表明,该结构有效解决了传

ai技术增长的博客 96

商品供给域的领域化拆解与系统化设计

本文以领域驱动设计(DDD)为方法论,对“商品供给域”这一核心业务域进行系统性拆解,从整体视角将其划分为核心域、支撑域与通用域,并重点围绕门店商品、总店商品、价格、库存等关键子域,深入分析其业务定位、核心上下文与设计原则。同时,结合质量、标签、日志与事件通知等支撑与通用能力,探讨商品供给体系在架构层面的协同方式与长期演进路径。文章旨在为构建一个边界清晰、可治理、可扩展的商品供给架构提供一套可落地的领域建模与设计参考。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 5万+

灰色预测GM(1,n)模型_python

灰色系统理论及其应用系列博文: 一、灰色关联度分析法(GRA)_python 二、灰色预测模型GM(1,1) 文章目录一、GM(1,n)算法二、示例2.1 数据:2.2 代码_使用GM(1,n)城市用水总量2.3 结果分析 一、GM(1,n)算法 二、示例 注:数据均来自论文《基于灰色系统理论的贵阳市城市用水总量预测》 2.1 数据: data.csv 年份,城区人口,建成区面积,供水总量,用水人口,人口综合用水指标,城市用水总量 2002, 191.85, 98.00, 26396.00,

qq_34229228的博客 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: Unity游戏开发客户端面经——数据结构(初级)
下一篇: Unity游戏开发客户端面经——算法(初级)
Game_小志
博客等级 码龄6年 4565粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值