0%

互联网的产生带来了机器间通讯的需求,而互联通讯的双方需要采用约定的协议,序列化和反序列化属于通讯协议的一部分。

  • 序列化: 将数据结构或对象转换成二进制串的过程
  • 反序列化:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程
阅读全文 »

Lua 中的 os.time() 获取的时间是当前设备的时间,但是当前设备是可以修改时间的,所以这个接口并不可靠。另外如果设备修改了时区,这个接口也没有提供获取指定时区当前时间的功能。

这样在各种需要显示时间以及根据时间判断是否开放系统的地方很可能因此出现问题。所以需要自己封装一些接口来获取服务器时区对应的时间。因为游戏时间肯定是以服务器所在时区显示为准。

阅读全文 »

LuaJIT 可以将 lua 代码编译为字节码然后解释执行,增加反编译的难度。

通过对 LuaJIT 引擎的源码进行定制,将其生成的 LuaJIT 字节码的 opcode 随机化地打乱、增加干扰的opcode、文件格式变换。这样反编译的难度会进一步提高。下面记录一下编译 LuaJIT 的过程。

阅读全文 »

踩了很多坑,因为网上几年前基本上都是用第三方 protobuf-net 库来作为 C# 的 Protobuf 工具使用的,尤其是 Unity 。所以关于 Google 官方的 C# 集成到 Unity 基本没人使用,C# 非 Unity 的开发(比如 .net )可以通过VS的 Nuget 快速集成 Protobuf,在 Unity 上这样做只能够在 VS 编辑器下检测到这个库,而 Unity 编辑器是不知道的,所以不能用这种方式。

而直接接入源码也会因为缺少依赖报错无法解决,最终还是采用自己编译出DLL集成的方式来接入。

另外前提是 Unity 切换成 .net4.x,因为 Google Protobuf 需要 4.5+。

阅读全文 »

在 tolua 和 xlua 中,调用 print 会直接在 Unity 控制台输出日志。而实际上 Lua 的源码中 print 只是输出日志,想要传递到 C# 需要额外做一些操作。

阅读全文 »

前言

常见的Lua热更新都是在客户端下载所有Lua代码之后重启游戏,以实现重载所有数据和函数的目的。但在实际开发过程中,如果每次都要改完Lua代码重启游戏,正常人都不能接受。

除这种热更方式之外,其实还可以实现运行时热更,或者叫无感知热更。可以做到在玩家运行游戏的时候偷偷更新一部分代码。

阅读全文 »

目前网络上的《Effective C#》笔记都是基于07年出版的原书第二版的翻译版本,如今很多理论已经过时,而最新的第三版的中文版已经在18年出版,因此这里分享一下第一章节C#的编程习惯的读书笔记。

阅读全文 »

Unity 的人物动作模型fbx文件中一般会有一个或多个 Animation 动画,为了配合音效,我们需要给 Animation 添加事件,Unity自带的Inspector可以实现简单的事件编辑,不过缺点是不能预览动作和音效事件的配合。因此可以自己制作工具来实现在运行时的事件编辑器。

阅读全文 »

Unity 的 Animator Controller 在游戏中一般用来做动画状态机,存放一个游戏中人物或物体的各种动画,便于程序调用。

由于很多人物的动画状态机结构基本一致,我们在使用时常常直接复制 Animator Controller 或者复制其中的节点到另外一个 Animator Controller 中。

但实际操作中,这样会产生冗余数据和不必要的引用关系。

阅读全文 »