無敵☆尛超人

Thinking will not overcome fear but action will.

浅谈 CLR GC & Boehm GC

涉及CLR、Boehm、Incremental、IL2CPP

前言 GC 全称 Garbage Collection。也叫垃圾回收。 引用计数算法:每一个对象都有一个引用计数器,当一个对象被引用时候,计数器就会+1,当不被引用时候,计数器就-1,当所有的引用都没有时候,那么计数器就会归0,那么这个对象就会被认为不再使用了,会回收此对象。 根搜索:根搜索就是从一个根开始遍历所有的叶子,然后把所有不需要的叶子清除。此中又可以分出1.Mark...

Unity 中的代码架构

跨平台原理,讲解mono运行时,c++层与c#层的交互原理

概要 Unity的代码其实是分为三层的,最上层供用户开发的C#层,中间封装了各种接口的C#层,最后就是C++层面的引擎底层具体函数的实现了。 到这里有些小伙伴可能就要问了,为啥Unity要搞这么复杂,代码结构还要分为三层。这是因为作为一款强大的商业引擎,他不仅要考虑引擎的性能问题,也同时要考虑对于开发人员的友好程度。那怎么才算友好呢,很简单,代码易于编写,支持跨平台(一套代码多平台可以运...

细说 Unity 中的 Asset 和 AssetBundle

Asset和Meta的关系,GUID和FileID,内存分配与释放

前言 我们使用Unity进行开发的时候多多少少都会接触Asset和AssetBundle,但是你真的了解他们么?今天就带你来一探究竟。 首先来看下Unity对Assets的描述: Assets are the models,textures,sounds and all other “content”files from which you make your game。 有...

初识 Lua

从入门到入坑

简介 Lua 是一门小而精的嵌入式语言,它可以很方便的和C代码交互,是一门非常好的开源语言。目前常被用于游戏、Web开发、人工智能等众多领域。Lua还具备非常良好的可扩展、简明、高效、可移植的特性。 表 表(Table)是Lua语言中最重要(事实上也是唯一的)和强大的数据结构。使用表,Lua可以以一种简单、统一且高效的方式表示数组、集合和其他很多数据结构。 闭包 Lua语言中的函数...

深入剖析 Unity 协程的实现原理

直击Unity协程源码,C#中的yield return

前言 用过Unity的应该都知道协程,今天就给大家来讲解下这个简洁又神奇的设计。一般的使用场景就是需要异步执行的时候,比如下载、加载、事件的延时触发等,函数的返回值是IEnumerator类型,开启一个协程只需要调用StartCoroutine即可,之后Unity会在每一次GameLoop的时候调用协程,具体的时间点可以看文档。 说了这么多我们来看下官方对协程给出的定义: A co...

利用 Sqlite 完成数据持久化

读取配置生成数据库、利用BAT加密数据库

简介 SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。SQLite 源代码不受版权限制。 这里再说明下,SQLite3是SQLite的第三个主要版本,避免大家突然看到Sqlite3不知道什么意思。 Sqlite3的加/解密 首先你得先把Sqlite3的库给下载到本地,项目里...

如何通过 C# 给 BAT 传递参数

通过.Net提供的接口直接调用BAT并传递参数

案例说明 之前在做项目的时候有个需求,要在代码内部调用本地的一个批处理(.bat)文件,最原始的做法是这样的。 Application.OpenURL(batPath); BAT代码是这样的。(切记,cd /D %~dp0一定要写,否则调用失败) cd /D %~dp0 echo Hello 后来发现如果能给批处理传递参数,整个功能会更加健硕,然后查阅各种资料发现可以这么写。 ...

A*寻路算法详解

F = G + H

A*寻路算法详解 搜索区域(The Search Area) 我们假设某人要从 A 点移动到 B 点,但是这两点之间被一堵墙隔开。如图,绿色是 A,红色是 B,中间蓝色是墙。 你应该注意到了,我们把要搜寻的区域划分成了正方形的格子。这是寻路的第一步,简化搜索区域,就像我们这里做的一样。这个特殊的方法把我们的搜索区域简化为了 2 维数组。数组的每一项代表一个格子,它的状态就是可走 (...

Unity 中 StreamingAssets 加载详解

Android、iOS、PC加载路径及方式

简介 StreamingAssets目录必须在Assets根目录下,该目录下所有资源也会被打包到游戏里,不同于Resources目录,该目录下的资源不会进行压缩,同样是只读不可写的。Unity基本也没有提供从该路径下直接读取资源的方法,只有www可以加载audioClip、texture和二进制文件,但Unity提供了从该目录加载AssetBundle的方法。 加载路径 可以通过A...

UniRx 详解

如何在Unity中优雅地编写异步程序

前言 我们都知道,游戏很多的系统都是在时间上异步的,所以 Unity 开发者所需要实现的异步逻辑是非常多的。这也是为什么 Unity官方在引擎层实现了Coroutine(协程)这样的概念。 在游戏中,像动画的播放、声音的播放、网络请求、资源加载/卸载、Tween动画、场景过渡等都是在时间上异步的逻辑。甚至是游戏循环(Every Update、OnCollisionEnter 等)、传感器...