
Unity
文章平均质量分 79
独立游戏开发指南
这个作者很懒,什么都没留下…
展开
-
Lua调试器工作原理
lua本身提供了回调机制,就是说当某事件产生时去调用指定的函数事件类型:#define LUA_MASKCALL(1 << LUA_HOOKCALL)#define LUA_MASKRET(1 << LUA_HOOKRET)#define LUA_MASKLINE(1 << LUA_HOOKLINE)#define LUA_MASKCOUNT...原创 2020-02-10 15:10:24 · 982 阅读 · 0 评论 -
Lua虚拟机及其工作流程
Lua虚拟机解释性脚本语言与编译型语言区别:1:由于每个脚本语言都有自己的一套字节码,与具体的硬件平台无关,所以不用修改脚本代码,就能运行在各个平台上。硬件、软件平台的差异都由语言自身的虚拟机解决2:由于脚本语言的字节码需要由虚拟机执行,而不像机器代码这样能够直接执行,所以运行速度比编译型语言差不少Lua使用的是基于寄存器的虚拟机实现方式,其中很大的原因是它的设计目标之一就是尽可能高效...原创 2020-02-10 12:00:27 · 796 阅读 · 0 评论 -
计算机基础
1:操作系统原语操作系统层面上的“原语”(比如 write 之类的系统调用)是不可中断的一组机器指令,对程序员来讲的确是不可分割的最小单位。但是这写系统调用本身还是用好几句汇编语句组成的(对于 Linux 来说是 C 语言),因此定义“原语”的前提是观察者所处的位置。比如就在操作系统的这层上,read,wirte,wait这些个系统调用自然就是最“原始”的词汇;2:进程通信方式...原创 2020-01-10 19:49:15 · 314 阅读 · 1 评论 -
Lua协程、GC垃圾回收机制以及如何调用C/C++函数
Lua 协程(coroutine)线程和协同程序区别与联系相同之处:Lua 协同程序(coroutine)与线程比较类似:拥有独立的堆栈,独立的局部变量,独立的指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。不同之处:一个多线程程序可以同时运行几个线程(并发执行、抢占),而协程却需要彼此协作地运行,并非真正的多线程,即一个多协程程序在同一时间只能运行一个协程,并且正在执行的...原创 2019-12-11 18:38:45 · 1189 阅读 · 0 评论 -
Lua如何实现面向对象?
Lua table(表)table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。table(表)的构造构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组:-- 初始化表mytable = {}-- 指定值mytable[1]= "Lua"-- 移除引用mytab...原创 2019-12-11 15:54:36 · 486 阅读 · 0 评论 -
XLua运行时热更新原理与实现
前言感谢提供思路两个博客主以下是博客地址:https://gameinstitute.qq.com/community/detail/120538https://www.jianshu.com/p/7b8ae23ecd81基本知识(热更新原理)我们在require一个Lua文件的时候是将Lua文件加载到package.loaded[modelname]中。当我们加载模块的时候,会先...转载 2019-12-11 11:21:40 · 1439 阅读 · 0 评论 -
Unity 关于帧同步的一些问题
1:帧同步如何解决不同步的问题?可靠稳定的帧同步基础算法 消除浮点数带来的精度误差 控制好随机数参考:Unity帧同步游戏极简框架及实例(附客户端服务器源码)2:帧同步怎么做到流畅的战斗?首先,定义一下流畅的战斗,流畅的战斗并不是代表着游戏的帧数一定要多高多高,而是说游戏的帧数在某一个帧数范围内小规模的变动,例如稳定在30帧这样。对于单机游戏来说,如果要保证稳定在30帧,每一...原创 2019-12-10 14:50:58 · 800 阅读 · 0 评论 -
Unity 基于帧同步的网络优化方案
帧同步含义游戏客户端接受来自网络的多个客户端的操作,如果这些操作在各个客户端是一样的,那么多个客户端的显示也就一样了,这就带来了“同步”的效果。所以在这种情况下,各个客户端的运算要绝对一致,不能依赖诸如本地时间、本地随机数等等“输入”,而要一切以网络来的操作数据为主。一般来说,大多数的游戏客户端引擎,都会定时调用一个接口函数,这个函数由用户填写内容,用来修改和控制游戏中各种需要显示的内容。...原创 2019-12-09 19:40:40 · 1000 阅读 · 0 评论 -
Unity帧同步游戏极简框架及实例(附客户端服务器源码)
阅前提示:此框架为有帧同步需求的游戏做一个简单的示例,实现了一个精简的框架,本文着重讲解帧同步游戏开发过程中需要注意的各种要点,伴随框架自带了一个小的塔防sample作为演示.哪些游戏需要使用帧同步如果游戏中有如下需求,那这个游戏的开发框架应该使用帧同步:多人实时对战游戏 游戏中需要战斗回放功能 游戏中需要加速功能 需要服务器同步逻辑校验防止作弊LockStep框架就是为了上...转载 2019-12-09 16:14:20 · 2523 阅读 · 0 评论 -
Moba类游戏中如何处理网络延迟与卡顿
《王者荣耀》技术测试版本出台的时候,延迟非常大,而且还是卡顿,现在看一下帧同步里面比较特别的地方。帧同步有点像在看电影,它传统的帧同步需要有buffer,每个玩家输入会转发给所有客户端,互相会有编号,按顺序输入帧。比如我现在已经收到第N帧,只有当我收到第N+1帧的时候,第N这一帧我才可以执行。服务器会按照一定的频率,不同的给大家同步帧编号,包括这一帧的输入带给客户端,如果带一帧给你的数据你...转载 2019-12-08 15:12:00 · 1938 阅读 · 0 评论 -
Moba类游戏中如何实现断线重连功能
网络游戏-断线重连1、背景移动网络信号波动频繁,给移动游戏开发者带来诸多困扰,处理不好会造成较差的用户体验以及重复扣道具等严重问题2、网络连接方式通常游戏客户端都是通过创建socket与服务器取得连接,但也会根据使用场景划分成两种连接方式:TCP连接和HTTP连接。1) TCP连接即我们常说的长连接。这种连接方式下socket连接一旦建立,通信双方即可相互发送数据,直到一方终止...原创 2019-12-08 14:30:59 · 1502 阅读 · 2 评论 -
Unity 网络游戏同步方式
对于联网游戏来讲,同步的方式主要分为两种,状态同步、帧同步。1、状态同步:顾名思义,是指的将其他玩家的状态行为同步的方式,一般情况下AI逻辑,技能逻辑,战斗计算都由服务器运算,只是将运算的结果同步给客户端,客户端只需要接受服务器传过来的状态变化,然后更新自己本地的动作状态、Buff状态,位置等就可以了,但是为了给玩家好的体验,减少同步的数据量,客户端也会做很多的本地运算,减少服务器同步的频率以...原创 2019-12-06 18:18:00 · 1378 阅读 · 0 评论 -
Unity中事件函数的执行顺序【超详细,图+文】
在Unity脚本中,有一些事件函数会在脚本执行时按预定顺序执行。 该执行顺序如下所述:编辑Reset:Reset是用来初始化脚本属性的,在第一次脚本附在对象上的时候和按下Reset按钮的时候会被执行。第一次场景加载Awake:Awake方法总是在Start方法执行之前和在一个prefab初始化后被调用。(如果一个gameobject处于inactive的状态,则Awake不会被调用,...翻译 2019-12-06 15:14:40 · 485 阅读 · 0 评论 -
TCP与UDP的区别(常见面试题)
相同点UDP协议和TCP协议都是传输层协议。TCP(Transmission Control Protocol,传输控制协议)提供的是面向连接,可靠的字节流服务。即客户和服务器交换数据前,必须现在双方之间建立一个TCP连接,之后才能传输数据。并且提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。UDP(User Data Protocol,用户数据报协议...原创 2019-12-05 20:28:50 · 1291 阅读 · 0 评论 -
C#中的Lambda表达式和表达式树
Lambda—— 表达式"Lambda表达式"是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写的代码量。它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式。所有Lambda表达式都使用Lambda运算符=>,该运算符读作"goes to"。Lambda运算符的左边是输入参数(如果有),...原创 2019-12-04 17:22:11 · 787 阅读 · 0 评论 -
C#中委托和事件的区别
委托提供与C++中“函数指针”相同的功能,用于传递和调用函数的引用,是观察者模式的一种实现。事件是用委托实现的,是对委托的额外封装,其本质上是一种特殊的委托。事件是基于委托的,为委托提供了一个发布/订阅机制。可以说事件是一种特殊的委托,他的调用和委托是一样的。事件的作用封装订阅: 事件将委托的订阅操作进行封装,仅允许 += 和 -= 操作,避免程序员在开发时因误用 = 使得委托链断...原创 2019-12-04 14:41:05 · 559 阅读 · 0 评论 -
A* 寻路算法
A* 寻路算法概述虽然掌握了A*算法的人认为它容易,但是对于初学者来说,A*算法还是很复杂的。搜索区域(The Search Area)我们假设某人要从A点移动到B点,但是这两点之间被一堵墙隔开。如图1,绿色是A,红色是B,中间蓝色是墙。你应该注意到了,我们把要搜寻的区域划分成了正方形的格子。这是寻路的第一步,简化搜索区域,就像我们这里做的一样。...转载 2019-12-03 17:34:55 · 508 阅读 · 0 评论 -
Unity有限状态机、层次状态机和行为树的联系及区别
一:有限状态机有限状态机(英语:finite-state machine,缩写:FSM)又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。有限状态机算是Unity开发中一个比较重要的技巧了。在游戏中,我们可能会遇到各种各样的状态,这里我以一个人物为例,我们可能要经常判断人物的生命状态或者人物的运动状态,然后做相应的操作。简单的有限状态机...原创 2019-12-02 20:29:18 · 2414 阅读 · 2 评论 -
Unity骨骼动画优化
一:骨骼动画的原理用Unity做游戏经常会用到3D角色,也就会用到骨骼动画。骨骼动画对性能的影响其实非常大的,在说这个问题之前,先来说说骨骼动画的原理。我之前做过多种骨骼动画,包括写过2D的骨骼动画系统(类似于现在比较流行的龙骨系统),也在flash的stage3D里面写过3D的骨骼模型动画。骨骼动画的原理实际上都是一样的:首先你需要有一个模型,2D或者3D的,这些模型是由顶点组成...转载 2019-12-02 17:18:10 · 1915 阅读 · 1 评论 -
Unity 动画压缩及其优化
一:为什么要做动画优化动画文件在游戏包体和内存中占的比例仅次于贴图,优化好动画文件,就优化了一小半游戏内存。拿我们正在开发的游戏举例,优化后的包体和内存比优化前减少了一百多兆,大概优化掉了五分之一的内存。二:优化思路2.1:Unity引擎对导入的AnimationClip提供三种压缩格式,Off、Keyframe Reduction和Optimal。其中,Off表示不采...原创 2019-12-02 00:57:31 · 2948 阅读 · 0 评论 -
Unity 音频资源优化
一:音频参数介绍1.1:Unity3D游戏引擎一共支持4个音乐格式的文件.AIFF 适用于较短的音乐文件可用作游戏打斗音效 .WAV 适用于较短的音乐文件可用作游戏打斗音效 .MP3 适用于较长的音乐文件可用作游戏背景音乐 .OGG 适用于较长的音乐文件可用作游戏背景音乐导入前的声音格式选择 短声音:.aiff和.wav 长声音:.mp3和.ogg...原创 2019-11-29 11:56:20 · 722 阅读 · 0 评论 -
Unity3D各平台路径(包括手机内置存储路径、SD卡等等)
关于Unity3D在各平台上的路径问题,网上有好多的资料,如下是比较好的参考资料:1、http://www.manew.com/thread-23491-1-1.html2、http://www.xuanyusong.com/archives/26563、https://blog.youkuaiyun.com/qq_37240033/article/details/54906715这里...转载 2019-11-28 16:27:53 · 389 阅读 · 0 评论 -
C#中的强引用和弱引用
我们平常用的都是对象的强引用,如果有强引用存在,GC是不会回收对象的。我们能不能同时保持对对象的引用,而又可以让GC需要的时候回收这个对象呢?.NET中提供了WeakReference来实现。弱引用可以让您保持对对象的引用,同时允许GC在必要时释放对象,回收内存。对于那些创建便宜但耗费大量内存的对象,即希望保持该对象,又要在应用程序需要时使用,同时希望GC必要时回收时,可以考虑使用弱引用。一:...转载 2019-11-28 15:59:46 · 1210 阅读 · 0 评论 -
C#知识点扫盲——GC(Garbage Collector)
1:在.Net里面垃圾收集的工作方式:运行.NET应用程序时,程序创建出来的对象实例都会被CLR跟踪,CLR都是有记录哪些对象还会被用到(存在引用关系);哪些对象不会再被用到(不存在引用关系)。CLR会整理不会再被用到的对象,在恰当的时机,按一定的规则销毁部分对象,释放出这些对象所占用的内存。2:CLR是怎么记录对象引用关系的?CLR会把对象关系做成一个“树图”,这样标记他们的引用关系...原创 2019-11-15 15:32:40 · 440 阅读 · 0 评论 -
c#中的interface abstract与virtual的介绍与使用
abstract 与virtual : 方法重写时都使用 override 关键字,interface中的方法和abstract方法都要求实现。1:interface用来声明接口1.1.只提供一些方法规约,不提供方法主体. 如:public interface IPerson{ void getName();//不包含方法主体}1.2.方法不能用public abs...原创 2019-11-15 14:50:31 · 765 阅读 · 0 评论