有趣的深度图:可见性问题的解法

2017-06-06
阅读 5 分钟
6.7k
说起深度,朋友们一定都不陌生。为了解决渲染场景时哪部分可见,哪部分不可见的问题(即可见性问题,也被称为隐藏面移除问题,hidden surface removal problem,从术语这个角度看,技术的发展有时也会带动心态向积极的方向的变化),计算机图形学中常使用画家算法或深度缓冲的方式。

使用 NUnit 为 Unity3D 编写高质量单元测试

2016-07-06
阅读 7 分钟
11.4k
最近尝试在我参与的游戏项目中引入TDD(测试驱动开发)的开发模式,因此单元测试便变得十分必要。这篇博客就来聊一聊这段时间的感悟和想法。由于游戏开发和传统软件开发之间的差异,因此在开发游戏,特别是使用Unity3D开发游戏的过程中编写单元测试往往会面临两个主要的问题:

Unity3D框架插件uFrame实用参考手册(二)

2016-07-02
阅读 5 分钟
4.5k
在这里,我们首先为Login节点中的属性(Properties)部分添加一个新的属性,该属性为String型,名为UserName。首先选中Login节点,点击Properties右边的“+”号按钮,此时我们可以发现Properties区域已经增加了一个新的属性。如果需要修改属性的名字,直接点击当前的属性名即可进入编辑状态。若要修改属性的类型,则点击当...

Unity3D框架插件uFrame实用参考手册(一)

2016-07-02
阅读 4 分钟
11k
uFrame是提供给Unity3D开发者使用的一个框架插件,它本身模仿了MVVM这种架构模式(事实上并不包含Model部分,且多出了Controller部分)。因为用于Unity3D,所以它向开发者提供了一套基于Editor的可视化编辑工具,可以用来管理代码结构等。本文为uFrame1.6版本在项目中实践的记录,主要包括一些uFrame中的基本概念以及应...

Unity3D 5.3 新版AssetBundle使用方案及策略

2016-07-01
阅读 8 分钟
6.6k
Unity3D 5.0版本之后的AssetBundle机制和之前的4.x版本已经发生了很大的变化,一些曾经常用的流程已经不再使用,甚至一些老的API已经被新的API所取代。因此,本文的主要内容就是分析5.X版本的AssetBundle机制(包括创建资源包、压缩资源包、加载资源包和从资源包中加载/卸载资源等几个方面)及其关键的API使用方式并总结...

解构 C# 游戏框架 uFrame 兼谈游戏架构设计

2016-06-22
阅读 7 分钟
5k
uFrame是提供给Unity3D开发者使用的一个框架插件,它本身模仿了MVVM这种架构模式(事实上并不包含Model部分,且多出了Controller部分)。因为用于Unity3D,所以它向开发者提供了一套基于Editor的可视化编辑工具,可以用来管理代码结构等。

剖析并利用Visual Studio Code在Mac上编译、调试c#程序

2016-06-21
阅读 6 分钟
11.8k
之前微软的Build大会上,微软发布了一个让很多人眼前一亮的工具,也是本文的主角——Visual Studio Code。很多使用Windows的朋友都很高兴,认为又多了一个很不错的文档编辑器。不过我更关心的是它的跨平台能力,所以写了这篇小文来聊聊在Mac上如何使用Visual Studio Code编译和调试C#代码,最后我也会尝试把Visual Studio ...

深入浅出聊优化:从Draw Calls到GC

2016-06-02
阅读 11 分钟
4.8k
刚开始写这篇文章的时候选了一个很土的题目。。。《Unity3D优化全解析》。因为这是一篇临时起意才写的文章,而且陈述的都是既有的事实,因而给自己“文(dou)学(bi)”加工留下的余地就少了很多。但又觉得这块是不得不提的一个地方,平时见到很多人对此处也给予了忽略了事,需要时才去网上扒一些只言片语的资料。也恰逢...

细说C#:委托的简化语法,聊聊匿名方法和闭包(下)

2016-05-31
阅读 11 分钟
5.6k
好,通过上面的分析,我们可以看到使用了匿名方法之后的确简化了我们在使用委托时还要单独声明对应的回调函数的繁琐。那么是否可能更加极致一些,比如用在我们在前面介绍的事件中,甚至是省略参数呢?下面我们来修改一下我们在事件的部分所完成的代码,看看如何通过使用匿名方法来简化它吧。

漫谈C#编程语言在游戏领域的应用

2016-05-09
阅读 3 分钟
5.8k
随着微软越来越开放,C#也变得越来越吸引人们的眼球。而在游戏行业中,C#也开始慢慢地获得了关注。这不, 网易绝代双娇手游团队已经全面使用.Net Core支持前后端统一C#开发,跨平台部署了。所以,我们就来总结一下C#在游戏行业中一些具体的应用吧。

细说C#:委托的简化语法,聊聊匿名方法和闭包(上)

2016-04-24
阅读 11 分钟
5.5k
通过之前博客《匹夫细说C#:庖丁解牛聊委托,那些编译器藏的和U3D给的》的内容,我们实现了使用委托来构建我们自己的消息系统的过程。但是在日常的开发中,仍然有很多开发者因为这样或那样的原因而选择疏远委托,而其中最常见的一个原因便是因为委托的语法奇怪而对委托产生抗拒感。

TDD与Unity3D游戏开发

2016-04-05
阅读 4 分钟
3.7k
关于TDD测试驱动开发的文章已经有很多了,但是在游戏开发尤其是使用Unity3D开发游戏时,却听不到特别多关于TDD的声音。那么本文就来简单聊一聊TDD如何在U3D项目中使用以及如何使用U3D 5.3.X之后版本已经集成的单元测试模块Editor Test Runner。

用 CIL 写程序:你好,沃尔德

2016-04-04
阅读 5 分钟
4.1k
项目紧赶慢赶总算在最近有了一些成绩,所以沉寂了几周之后,我也终于有时间写点东西了。以前我写过一篇文章对CIL做了一个简单地介绍,不过不知道各位看官看的是否过瘾,至少我觉得很不过瘾。所以决定写几篇关于CIL的文章,即和各位看官一起进行个交流,同时也是我自己总结和巩固一下这些知识点。俗话说的好,“万事开头,H...

趣说游戏AI开发:曼哈顿街角的A*算法

2016-02-19
阅读 5 分钟
4.2k
请叫我标题党!请叫我标题党!请叫我标题党!因为下面的文字既不发生在美国曼哈顿,也不是一个讲述美国梦的故事。相反,这可能只是一篇没有那么枯燥的关于算法的文章。A星算法,这个在游戏寻路开发中难免会用到的算法便是我这篇文章的主角。

“为什么DirectX里表示三维坐标要建一个4*4的矩阵?”

2016-01-25
阅读 4 分钟
8k
首先要说明的是,本文的标题事实上来自于知乎上的一个同名问题:为什么directX里表示三维坐标要建一个4*4的矩阵? - 编程 。因此,正如Milo Yip大神所说的这个标题事实上是存在问题的:矩阵是用于表示变换而不是坐标的。再了解了矩阵的作用之后,我们就要继续思考为什么变换要使用一个4×4的矩阵而不是3×3的矩阵呢?是不...

Unity3D为何能跨平台?聊聊CIL(MSIL)

2016-01-23
阅读 8 分钟
5.2k
其实小匹夫在U3D的开发中一直对U3D的跨平台能力很好奇。到底是什么原理使得U3D可以跨平台呢?后来发现了Mono的作用,并进一步了解到了CIL的存在。所以,作为一个对Unity3D跨平台能力感兴趣的U3D程序猿,小匹夫如何能不关注CIL这个话题呢?那么下面各位看官就拾起语文老师教导我们的作文口诀(Why,What,How),和小匹夫...

谁偷了我的热更新?Mono,JIT,iOS

2016-01-05
阅读 5 分钟
7k
由于我本人是做游戏开发工作的,所以平时也常常加一些玩家的群。而一些困扰玩家的问题,同样也困扰着我们这些手机游戏开发者。这不最近我看自己加的一些群,常常会有人问为啥这个游戏一更新就要重新下载,而不能游戏内更新呢?作为游戏开发者,或者说Unity3D程序员,我们都清楚Unity3D不支持热更新,甚至于在iOS平台上生...

趣说游戏AI开发:对状态机的褒扬和批判

2016-01-04
阅读 4 分钟
13.4k
因为临近年关工作繁忙,已经有一段时间没有更新博客了。到了元旦终于有时间来写点东西,既是积累也是分享。如题目所示,本文要来聊一聊在游戏开发中经常会涉及到的话题——游戏AI。设计游戏AI的目标之一是要找到一种便于使用并容易拓展的的方案,常见的一些游戏AI方案包括了有限状态机(FSM)、分层有限状态机(HFSM)、面向...

JS or C#?不存在的脚本之争

2015-12-21
阅读 7 分钟
5.1k
又来到了周末,小匹夫也终于有了喘口气写写博客的时间和精力。话说周五的下午,小匹夫偶然间晃了一眼游戏蛮牛Unity3D的QQ群,又看到了一个Unity3D开发中老生长谈的问题,“我的开发语言究竟是选择JavaScript呢?还是C#呢?”。对这个问题,小匹夫也觉得的确该认真的梳理一下了。那么为何说JavaScript和C#的争论根本就不存...

庖丁解牛聊委托,那些编译器藏的和U3D给的(下)

2015-12-18
阅读 10 分钟
3.9k
从表面看,委托似乎十分简单,让我们拆分一下这段代码:用C#中的delegate关键字定义了一个委托类型MyDelegate;使用new操作符来构造一个MyDelegate委托的实例myDelegate,通过构造函数创建的委托实例myDelegate此时所引用的方法是myMethod1,之后我们通过方法组转换为myDelegate绑定另一个对应的方法myMethod2;最后,用...

庖丁解牛聊委托,那些编译器藏的和U3D给的(上)

2015-12-17
阅读 5 分钟
3.5k
在设计模式中,有一种我们常常会用到的设计模式——观察者模式。那么这种设计模式和我们的主题“如何在Unity3D中使用委托”有什么关系呢?别急,先让我们来聊一聊什么是观察者模式。

庖丁解牛迭代器,聊聊那些藏在幕后的秘密

2015-12-10
阅读 13 分钟
3.6k
在我之前的一篇博客《细说C#:不是“栈类型”的值类型,从生命周期聊存储位置》的最后,我以总结和后记的方式涉及到一部分迭代器的知识。但是觉得还是不够过瘾,很多需要说清楚的内容还是含糊不清,所以本文就专门写一下c#中的迭代器吧。

没有神话,剖析decimal的“障眼法”

2015-12-08
阅读 5 分钟
5.4k
在上一篇文章《妥协与取舍,解构C#中的小数运算》的留言区域有很多朋友都不约而同的说道了C#中的decimal类型。事实上之前的那篇文章的立意主要在于聊聊使用二进制的计算机是如何处理小数的,无非我接触最多的是在托管环境下运行的高级语言C#,因此顺带使用了C#作为例子。一方面说明了计算机处理小数的本质,也起到了提醒...

妥协与取舍,解构计算机中的二进制浮点数运算

2015-12-03
阅读 6 分钟
6.4k
我在生活和工作中常常会遇到一些十分迷信机器的人,他们之中很多人都相信机器是最理智的,没有任何感情,是真正的铁面无私,因此机器的运算所给出的答案总是正确的,如果答案错误,那么一定是操作机器的人的问题。但机器的运算就一定是正确的吗?事实上,机器出现运算错误并不是一个罕见的情况,一个典型的例子便是小数...

从游戏脚本语言说起,剖析Mono所搭建的脚本基础

2015-11-30
阅读 11 分钟
6.5k
在日常的工作中,我偶尔能遇到这样的问题:“为何游戏脚本在现在的游戏开发中变得不可或缺?”。那么这周我就写篇文章从游戏脚本聊起,分析一下游戏脚本因何出现,而mono又能提供怎样的脚本基础。最后会通过模拟Unity3D游戏引擎中的脚本功能,将Mono运行时嵌入到一个非托管(C/C++)程序中,实现脚本语言和“引擎”之间的分离。

使用TypeScript拓展你自己的VS Code!

2015-11-29
阅读 9 分钟
12.1k
在前几天的美国纽约,微软举行了Connect(); //2015大会。通过这次大会,我们可以很高兴的看到微软的确变得更加开放也更加务实了。当然,会上放出了不少新产品和新功能,其中就包括了VS Code的beta版本。而且微软更进一步,已经在github将VS Code的代码开源了。除了这些让人兴奋的消息,我们还应该注意到VS Code提供了对...