unity热更新Lua
Lua热更新的原理为什么使用Lua作为热更新语言,不用C# 热更新本身对于资源热更新是非常容易的,Unity自带的AB包就可以轻松解决,难的是代码热更新,因为Unity中的C#是编译型语言,Unity在打包后,会将C#编译成一种中间代码,再由Mono虚拟机编译成汇编代码供各个平台执行,它打包以后就变成了二进制了,会跟着程序同时启动,就无法进行任何修改了。
LUA是解释型语言,并不需要事先编译成块,而是运行时动态解释执行的。这样LUA就和普通的游戏资源如图片,文本没有区别,因此可以在运行时直接从WEB服务器上下载到持久化目录并被其它LUA文件调用。
不用C#热更的原因 准确的说,C#在安卓上可以实现热更新,但在苹果上却不能。
那C#为什么不做成解释型语言呢?因为C#的定位是一个追求效率且功能强大的编译型语言。在安卓上可以通过C#的语言特性-反射机制实现动态代码加载从而实现热更新。 具体做法是:将需要频繁更改的逻辑部分独立出来做成DLL,在主模块调用这些DLL,主模块代码是不修改的,只有作为业务(逻辑)模块的DLL部分需要修改。游戏运行时通过反 ...
数据可持续化-ScriptableObject
ScriptableObject什么是 ScriptableObject
ScriptableObject 是 Unity 提供的一个数据配置存储基类,它是一个可以用来保存大量数据的数据容器,我们可以将它保存为自定义的数据资源文件。
ScriptableObject 是一个类似 MonoBehaviour 的基类,继承自 UnityEngine.Object 。要想使用它,需要我们写个脚本去继承 ScriptableObject 。需要注意的是,继承自 SctiptableObject 的脚本无法挂载到游戏物体上,毕竟它不是继承自 MonoBehaviour。
ScriptableObject 类的实例会被保存成资源文件(.asset文件),和预制体,材质球,音频文件等类似,都是一种资源文件,存放在 Assets 文件夹下,创建出来的实例也是唯一存在的。
ScriptableObject 的主要作用大体上可以分成三点:1) 编辑模式下的数据持久化2) 配置文件 (配置游戏中的数据)3) 数据复用 (多个对象共用一套数据)
编辑模式下的数据持久化当我们在编辑模式下修改了继承自 Scri ...
AndroidStudio-导入Gradle
关于AndroidStudio导入项目的正确方式,修改Gradle配置
前言在安卓的引擎AndroidStudio导入过程中,github存在许多老项目,他们的安卓版本号以及Gradle各不相同,固有此篇文章解决
安装AndroidStudio以及下载SDK相关链接:https://blog.csdn.net/qq_38436214/article/details/105073213
对比有关文件以下project为项目目录节点
build.gradle文件详解
根目录下的gradle文件
project/build.gradle:
这个是gradle 插件配置有关于插件版本下面讲解
1、repositories闭包,声明了jcenter()的配置2、dependencies闭包,声明了一个Gradle插件
1234567891011121314151617181920212223242526buildscript { repositories { //repositories闭包 google() jcenter() ...
SVN食用说明
前言在很多游戏公司,通过游戏体量和团队体量会有很多公司使用SVN(包括我公司),
主要原因在于SVN对于二进制文件比起Git来说适配,以及对于非技术人员(美术和策划)有着很低的学习成本
一、介绍SVN是什么?SVN 是一种代码版本管理工具,它具有以下功能:
记住每次的修改
查看所有的修改记录
恢复到任何历史版本
恢复已经删除的文件
SVN跟Git相比的优势
使用简单,上手快
目录级权限控制,企业安全必备
子目录 Checkout,减少不必要的文件检出
主要应用
开发人员用来做代码的版本管理
用来存储一些重要的文件,比如合同
公司内部文件共享,并且能按目录划分权限
SVN仓库推荐
svnbucket.com(SVN桶),目前最好用的 SVN 服务
安装SVN客户端
TortoiseSVN (windows)
Cornstone (mac)
二、SVN基本操作
检出 checkout
操作步骤
1
2
3
4
5
操作
TortoiseSVN
checkout
URL of repository
Checkout directory
user ...
unity 优化
介绍游戏性能优化的必要性
游戏启动优化Resource文件夹(是否可以存放很多东西)
游戏启动优化MonoBehaviour (Mono类应该使用多少,这些类逻辑应该是什么样的)
重复资源优化(会出现哪样问题)
纹理设置优化(减少内存提高效率)
纹理MipMap选择
纹理压缩优化 (对不同平台,每个平台格式不对会怎么样,比如重新解压)
非角色模型优化(脚本控制优化,减少渲染)
动画模型优化(提升了什么)
网格优化(对游戏点面处理的优化)
字符串优化1(拼接,比较,如果在update中不正确调用)
字符串优化2
集合List优化 (内存分部销毁)
闭包优化(什么时候调用合适,怎么规避怎么优化)
字典和枚举优化(内存分布,遍历效率)u
foreach优化(什么时候用forin 什么时候用for代替)
数组优化(少用多用List)
正则表达式优化
矢量运算顺序优化
颜色转换优化(颜色是自带的还是unity自带api)
object查找优化
摄像机访问优化(单例访问优化)
log输出优化(日志单打印,debug处理)
方法调用优 ...
c++ 和c11
内存管理C++
多态 虚函数
什么是多态?C++的多态是如何实现的?
所谓多态,就是同一个函数名具有多种状态,或者说一个接口具有不同的行为;C++的多态分为编译时多态和运行时多态,编译时多态也称为为静态联编,通过重载和模板来实现,运行时多态称为动态联编,通过继承和虚函数来实现。
对于非虚函数,三个类中虽然都有一个叫 func2 的函数,但他们彼此互不关联,因此都是各自独立的,不存在重载一说,在调用的时候也不需要进行查表的操作,直接调用即可。
由于子类B和子类C都是继承于基类A,因此他们都会存在一个虚指针用于指向虚函数表。注意,假如子类B和子类C中不存在虚函数,那么这时他们将共用基类A的一张虚函数表,在B和C中用虚指针指向该虚函数表即可。但是,上面的代码设计时子类B和子类C中都有一个虚函数 vfunc1,因此他们就需要各自产生一张虚函数表,并用各自的虚指针指向该表。由于子类B和子类C都对 vfunc1 作了重载,因此他们有三种不同的实现方式,函数地址也不尽相同,在使用的时候需要从各自类的虚函数表中去查找对应的 vfunc1 地址。
对于虚函数 vfunc2,两个子类都没有进行重载操 ...
git commit规范
前言
每次对于团队协作Git时,规范Git分支和Git Commit是很有必要的。
这是本人收集大厂实现的提交规范
Git
分支名
简介
Production 分支(main)
也就是我们经常使用的 Master (main)分支,这个分支最近发布到生产环境的代码,最近发布的Release, 这个分支只能从其他分支合并,不能在这个分支直接修改。
Develop 分支(dev)
这个分支是我们是我们的主开发分支,包含所有要发布到下一个 Release 的代码,这个主要合并与其他分支,比如 Feature 分支。
Feature 分支
这个分支主要是用来开发一个新的功能,一旦开发完成,我们合并回 Develop 分支进入下一个Release。
Release 分支
当你需要一个发布一个新 Release 的时候,我们基于 Develop 分支创建一个 Release 分支,完成 Release 后,我们合并到 Master 和 Develop 分支
Hotfix分支
当我们在 Production 发现新的 Bug 时候,我们需要创建一个 Hotfix ...
面筋
春招
第一家 广州 寄
首先问一下学习unity 多久了
C++ 在学校是怎么学习的 – oop 没有C11
那就问一个C#问题 List底层是什么
无序数组怎么增加增删的效率 –增:在最后增加 删:swap最后然后在最后删 (堆排序?)
聊天:lua现在好像淘汰 C# 技术栈就够 huatuo
场景题: 水果忍者 怎么随机生成水果和角度
场景题 : 水果忍者 怎么切割
第二家 杭州 oc
首先问一下学习unity 多久了
回答:大一下暑假断断续续,也是一年多
介绍一下杀戮尖塔项目
热更做了吗(没有)那做了什么
回答: 做了一个lua xlua的背包系统 写了个ABmanager 然后写Panel 后面补充了BasePanel的框架
有使用过unity的性能工具吗?有遇到性能问题吗
没有,但是大概知道理论
在CPU 和 GPU 方面的优化 大概了解吗
CPU : 代码层面:框架,缓存池 批处理:静态批处理 空间换时间
GPU : 太卡没回答
说一下你关于状态机的使用(后面有说公司项目有多用状态机来 ...
unity热更新AB包
前言热更新是手游平台对于游戏的一种特殊更新技术,本篇将讲解AB包的资源热更和Lua的代码热更
热更新AssetBundle详解 - 知乎 (zhihu.com)
[Unity AssetBundle的打包 发布 下载与加载_assetbundle下载-CSDN博客](https://blog.csdn.net/newchenxf/article/details/124738469#:~:text=2.1 AB包的文件结构 1 将想要动态加载的资源添加到AssetBundle (可以有多个bundle) 2 要发布时,做打包工作 3,自己把bundle上传到服务器,服务器管理版本 4 客户端下载bundle,版本不匹配(md5校验啥的),则下载新bundle 5 加载指定路径的bundle,提取文件 6 卸载bundle, 节约内存)
AssetBundle的概念AssetBundle又称AB包,是Unity提供的一种用于存储资源的资源压缩包。
Unity中的AssetBundle系统是对资源管理的一种扩展,通过将资源分布在不同的AB包中可以最大程度地减少运行时的内存压力,可以动态地加载 ...
unity网络开发理论
前言计算机网络部分
OSI模型
五层模型
作用
应用层
为应用程序提供交互服务。在互联网中的应用层协议很多,如域名系统DNS、HTTP协议、SMTP协议等。
传输层
负责向两台主机进程之间的通信提供数据传输服务。传输层的协议主要有传输控制协议TCP和用户数据协议UDP。
网络层
选择合适的路由和交换结点,确保数据及时传送。主要包括IP协议。
数据链路层
在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。
物理层
实现相邻节点间比特流的透明传输,尽可能屏蔽传输介质和物理设备的差异。
层级
名称
描述
7
应用层
计算机用户、应用程序与网络之间的接口,提供网络服务及应用所需的监督、管理和服务等协议,负责协调各个应用程序间的工作。
6
表示层
对来自应用层的命令和数据进行解释,处理用户信息的表示问题,如编码、数据格式转换和加密解密,并传送给会话层。
5
会话层
用户应用程序和网络之间的接口,组织和协调两个会话进程之间的通信,并对数据交换进行管理。
4
传输层
提供可靠的端到端的 ...