自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Lua调试器工作原理

lua本身提供了回调机制,就是说当某事件产生时去调用指定的函数 事件类型: #define LUA_MASKCALL(1 << LUA_HOOKCALL) #define LUA_MASKRET(1 << LUA_HOOKRET) #define LUA_MASKLINE...

2020-02-10 15:10:24 142 0

原创 Lua虚拟机及其工作流程

Lua虚拟机 解释性脚本语言与编译型语言区别: 1:由于每个脚本语言都有自己的一套字节码,与具体的硬件平台无关,所以不用修改脚本代码,就能运行在各个平台上。硬件、软件平台的差异都由语言自身的虚拟机解决 2:由于脚本语言的字节码需要由虚拟机执行,而不像机器代码这样能够直接执行,所以运行速度比编译型...

2020-02-10 12:00:27 102 0

原创 计算机基础

1:操作系统原语 操作系统层面上的“原语”(比如 write 之类的系统调用)是不可中断的一组机器指令,对程序员来讲的确是不可分割的最小单位。 但是这写系统调用本身还是用好几句汇编语句组成的(对于 Linux 来说是 C 语言),因此定义“原语”的前提是观察者所处的位置。 比如就在操作系统的...

2020-01-10 19:49:15 59 0

转载 UGUI 查找按钮名称

昨天在做项目的时候,按钮是符合条件才会出现的,所以我需要在点击按钮时获得这个按钮究竟是哪一个,在询问了N多人之后,还是百度告诉了我这个答案。 string name = EventSystem.current.currentSelectedGameObject.GetComponent<...

2019-12-13 10:55:22 68 0

原创 Lua协程、GC垃圾回收机制以及如何调用C/C++函数

Lua 协程(coroutine) 线程和协同程序区别与联系 相同之处:Lua 协同程序(coroutine)与线程比较类似:拥有独立的堆栈,独立的局部变量,独立的指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。 不同之处:一个多线程程序可以同时运行几个线程(并发执行、抢占),而...

2019-12-11 18:38:45 107 0

原创 Lua如何实现面向对象?

Lua table(表) table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。 table(表)的构造 构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组: -- 初始化表 my...

2019-12-11 15:54:36 46 0

转载 XLua运行时热更新原理与实现

前言 感谢提供思路两个博客主以下是博客地址:https://gameinstitute.qq.com/community/detail/120538 https://www.jianshu.com/p/7b8ae23ecd81 基本知识(热更新原理) 我们在require一个Lua文件的时...

2019-12-11 11:21:40 132 0

原创 Unity 关于帧同步的一些问题

1:帧同步如何解决不同步的问题? 可靠稳定的帧同步基础算法 消除浮点数带来的精度误差 控制好随机数 参考:Unity帧同步游戏极简框架及实例(附客户端服务器源码) 2:帧同步怎么做到流畅的战斗? 首先,定义一下流畅的战斗,流畅的战斗并不是代表着游戏的帧数一定要多高多高,而是说游戏的帧数在...

2019-12-10 14:50:58 51 0

原创 Unity 基于帧同步的网络优化方案

帧同步含义 游戏客户端接受来自网络的多个客户端的操作,如果这些操作在各个客户端是一样的,那么多个客户端的显示也就一样了,这就带来了“同步”的效果。所以在这种情况下,各个客户端的运算要绝对一致,不能依赖诸如本地时间、本地随机数等等“输入”,而要一切以网络来的操作数据为主。 一般来说,大多数的游戏...

2019-12-09 19:40:40 213 0

转载 Unity帧同步游戏极简框架及实例(附客户端服务器源码)

阅前提示: 此框架为有帧同步需求的游戏做一个简单的示例,实现了一个精简的框架,本文着重讲解帧同步游戏开发过程中需要注意的各种要点,伴随框架自带了一个小的塔防sample作为演示. 哪些游戏需要使用帧同步 如果游戏中有如下需求,那这个游戏的开发框架应该使用帧同步: 多人实时对战游戏 游戏中需...

2019-12-09 16:14:20 187 0

转载 Moba类游戏中如何处理网络延迟与卡顿

《王者荣耀》技术测试版本出台的时候,延迟非常大,而且还是卡顿,现在看一下帧同步里面比较特别的地方。帧同步有点像在看电影,它传统的帧同步需要有buffer,每个玩家输入会转发给所有客户端,互相会有编号,按顺序输入帧。 比如我现在已经收到第N帧,只有当我收到第N+1帧的时候,第N这一帧我才可以执行。...

2019-12-08 15:12:00 141 0

原创 Moba类游戏中如何实现断线重连功能

网络游戏-断线重连 1、背景 移动网络信号波动频繁,给移动游戏开发者带来诸多困扰,处理不好会造成较差的用户体验以及重复扣道具等严重问题 2、网络连接方式 通常游戏客户端都是通过创建socket与服务器取得连接,但也会根据使用场景划分成两种连接方式:TCP连接和HTTP连接。 1) TCP...

2019-12-08 14:30:59 100 1

原创 Unity 网络游戏同步方式

对于联网游戏来讲,同步的方式主要分为两种,状态同步、帧同步。 1、状态同步:顾名思义,是指的将其他玩家的状态行为同步的方式,一般情况下AI逻辑,技能逻辑,战斗计算都由服务器运算,只是将运算的结果同步给客户端,客户端只需要接受服务器传过来的状态变化,然后更新自己本地的动作状态、Buff状态,位置等...

2019-12-06 18:18:00 144 0

翻译 Unity中事件函数的执行顺序【超详细,图+文】

在Unity脚本中,有一些事件函数会在脚本执行时按预定顺序执行。 该执行顺序如下所述: 编辑 Reset:Reset是用来初始化脚本属性的,在第一次脚本附在对象上的时候和按下Reset按钮的时候会被执行。 第一次场景加载 Awake:Awake方法总是在Start方法执行之前和在一个pref...

2019-12-06 15:14:40 78 0

原创 TCP与UDP的区别(常见面试题)

相同点 UDP协议和TCP协议都是传输层协议。 TCP(Transmission Control Protocol,传输控制协议)提供的是面向连接,可靠的字节流服务。即客户和服务器交换数据前,必须现在双方之间建立一个TCP连接,之后才能传输数据。并且提供超时重发,丢弃重复数据,检验数据,流量控...

2019-12-05 20:28:50 196 0

原创 C#中的Lambda表达式和表达式树

Lambda—— 表达式 "Lambda表达式"是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写的代码量。它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式。所有Lambda...

2019-12-04 17:22:11 71 0

原创 C#中委托和事件的区别

委托提供与C++中“函数指针”相同的功能,用于传递和调用函数的引用,是观察者模式的一种实现。 事件是用委托实现的,是对委托的额外封装,其本质上是一种特殊的委托。 事件是基于委托的,为委托提供了一个发布/订阅机制。可以说事件是一种特殊的委托,他的调用和委托是一样的。 事件的作用 封装订阅: ...

2019-12-04 14:41:05 14 0

原创 windows环境下lib和dll的区别和联系详细

c++中共有两种库: 1、LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。(这种方式更灵活,写的程序体积小,但是需要.exe和dll同时发布)2、LIB包含函数代码本身,在编译时直接将...

2019-12-03 17:40:26 149 0

转载 A* 寻路算法

A* 寻路算法 概述 虽然掌握了A*算法的人认为它容易,但是对于初学者来说,A*算法还是很复杂的。 搜索区域(The Search Area) 我们假设某人要从A点移动到B点,但是这两点之间被一堵墙隔开。如图1,绿色是A,红色是B,中间蓝色是墙。 你应该注意到了,我们把要搜寻的区域划...

2019-12-03 17:34:55 133 0

原创 Unity有限状态机、层次状态机和行为树的联系及区别

一:有限状态机 有限状态机(英语:finite-state machine,缩写:FSM)又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。 有限状态机算是Unity开发中一个比较重要的技巧了。在游戏中,我们可能会遇到各种各样的状态,这里我以一个人...

2019-12-02 20:29:18 226 0

转载 Unity骨骼动画优化

一:骨骼动画的原理 用Unity做游戏经常会用到3D角色,也就会用到骨骼动画。骨骼动画对性能的影响其实非常大的,在说这个问题之前,先来说说骨骼动画的原理。 我之前做过多种骨骼动画,包括写过2D的骨骼动画系统(类似于现在比较流行的龙骨系统),也在flash的stage3D里面写过3D的骨骼模型动...

2019-12-02 17:18:10 126 0

原创 Unity 动画压缩及其优化

一:为什么要做动画优化 动画文件在游戏包体和内存中占的比例仅次于贴图,优化好动画文件,就优化了一小半游戏内存。拿我们正在开发的游戏举例,优化后的包体和内存比优化前减少了一百多兆,大概优化掉了五分之一的内存。 二:优化思路 2.1:Unity引擎对导入的AnimationClip提供三种压...

2019-12-02 00:57:31 254 0

原创 Unity 音频资源优化

一:音频参数介绍 1.1:Unity3D游戏引擎一共支持4个音乐格式的文件 .AIFF 适用于较短的音乐文件可用作游戏打斗音效 .WAV 适用于较短的音乐文件可用作游戏打斗音效 .MP3 适用于较长的音乐文件可用作游戏背景音乐 .OGG 适用于较长的音乐文件可用作游戏背景音乐 导入前的声...

2019-11-29 11:56:20 59 0

转载 Unity3D各平台路径(包括手机内置存储路径、SD卡等等)

关于Unity3D在各平台上的路径问题,网上有好多的资料,如下是比较好的参考资料: 1、http://www.manew.com/thread-23491-1-1.html 2、http://www.xuanyusong.com/archives/2656 3、https://blog.csd...

2019-11-28 16:27:53 34 0

转载 C#中的强引用和弱引用

我们平常用的都是对象的强引用,如果有强引用存在,GC是不会回收对象的。我们能不能同时保持对对象的引用,而又可以让GC需要的时候回收这个对象呢?.NET中提供了WeakReference来实现。弱引用可以让您保持对对象的引用,同时允许GC在必要时释放对象,回收内存。对于那些创建便宜但耗费大量内存的对...

2019-11-28 15:59:46 80 0

转载 Unity3d DOTween 插件 详细使用方法

Tween的移动类型有很多种,比如匀速运动、加速运动、减速运动,等等。如果你拿捏不准你需要用什么移动类形式。 http://www.robertpenner.com/easing/easing_demo.html你可以在这里预览一下那种移动类型更佳适合你。 using UnityEngine...

2019-11-27 18:30:13 24 0

转载 C++对象模型

何为C++对象模型? C++对象模型可以概括为以下2部分: 1、语言中直接支持面向对象程序设计的部分; 2、对于各种支持的底层实现机制。 语言中直接支持面向对象程序设计的部分,如构造函数、析构函数、虚函数、继承(单继承、多继承、虚继承)、多态等等。本文重点介绍底层实现机制。 在C语言中,...

2019-11-27 18:23:33 15 0

原创 设计模式的六大原则之六(开放封闭原则)

原则6:开放封闭原则 核心思想:软件实体应该是可以扩展的;也就是,对扩展开放,对修改封闭; 定义 一个软件实体如类、模块和函数应该对扩展开放,对修改关闭 在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时, 可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进...

2019-11-27 11:33:35 23 0

原创 设计模式的六大原则之五(迪米特法则)

原则5:迪米特法则 核心思想:一个对象应该对其他对象保持最少的了解(即:只与直接的朋友通信) 定义 一个对象应该对其他对象保持最少的了解 类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。 因此,尽量降低类与类之间的耦合。 自从我们接触编程开始,就知道了软件编程...

2019-11-27 11:29:23 33 0

原创 设计模式的六大原则之四(接口隔离原则)

原则4:接口隔离原则 核心思想:使用多个小的专门的接口,而不要使用一个大的总接口; 定义 客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。 举例来说明接口隔...

2019-11-27 11:16:46 29 0

原创 设计模式的六大原则之三(依赖倒置原则)

原则3:依赖倒置原则 核心思想:依赖于抽象(就是对接口编程,不要对实现编程) 定义 高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。 以抽象为基础搭建起来的架构比以细节为基础搭建起来的架构要稳定的多。 抽象指的是接口或者抽象类,细节就是具体的实现类,...

2019-11-27 11:10:22 29 0

原创 设计模式的六大原则之二(里氏替换原则)

原则2:里氏替换原则 核心思想:子类必须能够替换其基类; 名字的由来 肯定有不少人跟我刚看到这项原则的时候一样,对这个原则的名字充满疑惑。 其实原因就是这项原则最早是在1988年,由麻省理工学院的一位姓里的女士(Barbara Liskov)提出来的。 简单来说的话,就是当我们使用继承时,遵...

2019-11-26 20:02:54 18 0

原创 设计模式的六大原则之一(单一职责原则)

Unity脚本编程 众所周知,unity的编程属于脚本化,脚本没有一个具体的概念跟架构, 导致在项目过程中,经常出现哪里需要实现什么功能,就随便添加脚本, 结果,就造成了一片混乱,不好管理。 更有甚者,自己的写的代码闲置一段时间后,再去想找某个功能的实现,都要在视图中翻来覆去找半天。 哎!请...

2019-11-26 18:08:40 31 0

原创 VS2017 中修改文本编码格式 为"UTF-8"

1:VS修改单个文本编码格式 VS2017默认格式为 "GB2312-80",很多时候可能出现乱码情况,就是编码问题,如何在VS里修改呢? 操作方法如下所示: 首先点击文件-〉高级保存选项 然后会出现下面的窗口: 然后 选择UTF-8即可 2:显示高级保...

2019-11-26 11:12:07 309 0

原创 设计模式之命令模式

命令模式 命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。 介绍 意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客...

2019-11-22 14:29:45 28 0

转载 设计模式之MVC 模式

MVC 模式 MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。 Model(模型)- 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。 View(视图)- 视图代表模型包含的...

2019-11-21 16:08:07 44 0

原创 设计模式之代理模式(Proxy mode)

代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。组成: 抽象角色:通过接口或抽象类声明真实角色实现的业务方法。 代理角色:实现抽象角色,是真实角色的代理,通过真实角...

2019-11-20 18:58:41 84 0

原创 设计模式之单例模式

单例类是开发过程中必不可少的东西。介绍完两个常用单例类型后会介绍一个简单却很实用的MonoEvent。 关于单例的写法网上有很多,这篇文章主要想介绍的是MonoEvent以及为之后的计时器做准备。 1:普通单例 最普通的写法,加了个线程锁,通过属性访问,不光是Unity,所有的c#程序都能用...

2019-11-20 17:33:07 43 0

原创 设计模式之外观(Facade)模式

外观模式 外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。 这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。 介绍...

2019-11-20 16:44:14 15 0

原创 设计模式之工厂模式

简单工厂模式 讲工厂,首先得从简单工厂说起。 简单工厂模式的目的是用来创建不同类型的对象。需要指出的是它并不是GOF的23种模式之一。 结构 实现 废话少说,直接上代码。 public interface IProduct { void DoSth(); } public...

2019-11-19 10:58:10 18 0

提示
确定要删除当前文章?
取消 删除