手游开发
代码狂人
我热爱软件开发事业,诚恳和广大软件爱好者交流
展开
-
The AssetBundle ‘xxx‘ can‘t be loaded because another AssetBundle with the same
The AssetBundle 'journeyweekend3_2.asset' can't be loaded because another AssetBundle with the same files is already loaded。 项目在调用AssetBundle.LoadFromFileAsync接口时报了上面的错误. 上面这种错误提示,网上很多说法是不同目录下存在同一个assetbundle文件,两个都加载时会报上面的错误,但是我在项目中确...原创 2020-08-27 16:35:02 · 6766 阅读 · 0 评论 -
深入浅出垃圾回收算法
这篇文章介绍几种垃圾回收算法,以使用我们更好的理解内存回收的原理、性能以及优缺点。术语为了后面叙述方便,首先明确以下几个名词的含义:Collector,用于进行垃圾回收的线程 Mutators,应用程序的线程,可以修改 heap MS,mark-sweep 算法的简写 MC,mark-compact 算法的简写 RC,reference-counting 的简写 liveness,一个对象的可到达性MS 基本流程首先来回顾下追踪类 GC 最基本的mark-and-sweep ..转载 2020-08-17 02:02:40 · 488 阅读 · 0 评论 -
FlatBuffers学习笔记三——解析二进制流文件
上一篇文章讲了如何生成二进制流文件,本篇文章来讲一下如何解析FlatBuffers生成的二进制流文件,已达到我们游戏中使用数据的目的。 其实解析数据是最简单的了,主要代码段如下: public static void Decode() { FileStream fileStream = new FileStream("./Assets/DataFlatBuffer/Monster.bytes", FileMode.Open, FileAcce...原创 2020-06-27 18:31:53 · 1228 阅读 · 1 评论 -
FlatBuffers学习笔记二——生成二进制流文件
很早之前我已经讲了如何生成表格解析代码点这里,本次讲一下如何将表格数据生成二进制流。一、添加FlatBuffers插件 如果我们要使用FlatBuffers技术,那么必须向工程中添加FlatBuffers插件,步骤很简单,我们新建一个Unity3D的空工程,然后在Asset目录下新建Plugins文件夹,并且将之前生成的FlatBuffers.dll文件放到此目录下即可。二、设计数据表格 我们做开发游戏项目时,经常要为策划设计表格,然后由策划...原创 2020-06-27 18:21:23 · 1936 阅读 · 0 评论 -
游戏开发中常用的两种同步模式:状态同步和帧同步
一、同步所谓同步,就是要多个客户端表现效果是一致的,例如我们玩王者荣耀的时候,需要十个玩家的屏幕显示的英雄位置完全相同、技能释放角度、释放时间完全相同,这个就是同步。就好像很多个人一起跳街舞齐舞,每个人的动作都要保持一致。而对于大多数游戏,不仅客户端的表现要一致,而且需要客户端和服务端的数据是一致的。所以,同步是一个网络游戏概念,只有网络游戏才需要同步,而单机游戏是不需要同步的。二、状态同步和帧同步的区别最大的区别就是战斗核心逻辑写在哪,状态同步的战斗逻辑在服务端,帧同步的战斗逻辑在客户端.转载 2020-06-13 18:10:44 · 2231 阅读 · 0 评论 -
小议C#引用类型对象在循环引用时会不会内存泄漏
循环引用指的是A引用了B,而B又引用了A。在写代码的时候,都难免会这样写:地图引用了战斗单位,战斗单位又引用了地图。。如图:(来源于国外大神的解释)当A没有再被其他类引用,则A,B,C都应该被垃圾回收。如果判断该对象是否需要被回收的依据是基于引用计数的,那上面代码就会是这样:B被C和A引了,引用计数为2,C被B引了,引用计数为1,这样内存就泄露了。所以C#的GC并没有用引用计数。GC有一些“根”,对象都挂在上面。从“根”往其子结点进行遍历,就可以标注出哪些对象是被使用的。A对象没有被..转载 2020-05-15 23:11:34 · 1219 阅读 · 0 评论 -
Unity里面Resources.Load之后为什么需要Instantiate?
一个是加载到内存里,一个是实例化到场景中 这是unity的一个缺陷,本来一个gameobject加载之后,只需要addToScene就可以了,但它却选择做一次copy,然后在这个操作内附带addToScene。 它这样做的理由无非是,运行修改物体后,原来资源的那一份不会变化,还可以再次使用。所以就强制每次用必须复制。然而,gameobject复制其实是一个相当耗时的操作,而且必须占用主线程,成为了一个重要的卡顿点。 预设(Prefab)是资源...原创 2020-05-15 21:58:06 · 1523 阅读 · 0 评论 -
VS Code隐藏Unity工程中meta文件以及将后缀为lua.txt或者lua.bytes识别为lua的方法
现在我们使用Unity开发手游时,Unity会生成大量的meta文件,以及Unity无法识别后缀为.lua的文件,所以一般将.lua文件再加一个后缀.txt或者.bytes来解决Unity无法识别的问题。编辑lua代码时很多人都喜欢使用VS Code,即微软大名鼎鼎的Visual Studio Code工具,此为很轻量级编辑器,并且提供了大量的插件供程序员使用,非常受程序员的欢迎。...原创 2019-04-02 22:18:38 · 2690 阅读 · 2 评论 -
FlatBuffers学习笔记一——初识FlatBuffers
一、文件下载1.下载flatc.exe工具和FlatBuffers源码,链接请点我;2.用Visual Studio打开源码/net/FlatBuffers/FlatBuffers.csproj项目,编译输出类库文件FlatBuffers.dll;3.查看官方说明文档请点我;4.官方C#示例代码可见源码/tests/FlatBuffers.Test工程二、工具介绍1....原创 2019-02-25 00:30:39 · 6510 阅读 · 0 评论 -
Unity中GameObject.SetActive函数和Component.enabled属性的区别
我们在Unity项目里对某个GameObject进行隐藏时,用gameObject.SetActive(false)可以达到目的,也可以对enabled属性赋值false达到同样的目的,那么这两者究竟有何区别呢,今天我特意写了一个Demo进行了验证。 为了方便验证,我特意写了一个继承自Image的自定义Class,在主要的生命周期函数里输出Log来进行验证,这里我使用...原创 2019-02-27 16:53:23 · 9582 阅读 · 3 评论