视差预览 & 摇动的草
2017-10-15

很久没写博客了,之前一直想整理一些东西出来,不过把 repo clone 下来以后才发现自己的主题被设置为了 submodule 所以没有 push 上去……于是只有回到上海拿到旧电脑,把文件恢复了才能继续写东西。T^T

今天记录一下最近在做 Cocoon 的时候写的比较有意思的两个场景/渲染相关的小技巧。

再见, Chester
2017-07-22


ECS模式学习小结
2017-06-17

今天在研究一些 Game code organization 方面的问题。看到暴雪的 GDC 分享《守望先锋》架构设计与网络同步,于是便顺着稍微深入的了解了一下 ECS 模式,在此做一个简要的记录。

1 ECS 架构

译自维基百科:

ECS,即 Entity–component–system 模式,是一个多用于游戏开发的架构模式。ECS 遵循“组合优于继承”的原则,带来了极大的灵活性。每个游戏中的实体 (Entity) 都包含一个或多个组件 (Component),来添加额外的行为或功能。因此,实体的行为可以在运行时通过添加和移除组件来改变。通常的 ECS 编程方式和数据驱动的设计技巧兼容性极好。

拥抱不确定性
2017-06-10

不知不觉,正式进行 Project Gearbox 的制作的时间已经快两个学期了。我们曾经想要把这个项目快速做完,尽可能快的上线。讽刺的是,GB 现在仍然处于原型试验阶段(尽管我们已经取得了很多不错的进展),而离项目完成(甚至是 Demo 的完成)更是远在彼方。

这并不是因为制作者在怠慢这个项目。相反,参与这个项目的成员都很重视它。我们无数次的讨论机制、编写策划、制作原型、实验玩法。可又在同时,我们因为原型不好玩而懊恼苦思,因为做不出来而陷入焦虑,因为达不到我们想要的效果而数次推倒重来。现在,我们终于渐渐进入了一个亚稳定的开发状态,而这个开发状态是建立在无数的方向性失败上的。

半年多的时间已经过去了。这是充满了疑问、不确定性、焦虑感,又同时激发着我们的能力和挑战欲的半年。为了在未来走的更好,我现在把我们曾经踩过的坑一一整理,只希望为接下来的独立游戏开发之路提供一个更好的参考。

心流与游戏
2017-03-14

一直都听说心流理论和游戏的关系很大。在寒假的时候,我也抽出时间去阅读了心流理论的原著《Flow》,感觉里面提到了很多非常有趣的想法,只可惜自己因为懒癌一直没有整理成文。前段时间又看了一遍陈星汉的将心流理论运用到游戏中的论文,也在冰岩游戏组做了一个分享。这里就把分享的内容整理一下,也写一点自己简单的分析。

这篇分析将主要基于陈星汉的论文Flow in Games展开,辅以自己的一些思考www

心流是什么

心流(Flow)是一个心理学概念,由心理学家Mihaly Csikszentmihalyi提出。它代表了一种极度专注、投入、愉快的精神状态——我们完全沉浸于当前所做的事中,以致于暂时忘却了它以外的所有事物。

心流的状态是非常愉快而且具有奖励性的,在紧张比赛中的运动员、上台演出的舞蹈演员、进行极限运动的运动员等,在各自的活动中都有着不同的心流体验,但心流的特质是相同的。一个活动要达成心流,一般要包括以下的核心部分:

  • 是一个要求技能的挑战性活动
  • 行动和知觉的统一 [1]
  • 明确的目标
  • 直接的反馈
  • 专注于当前的目标
  • 有控制的感觉
  • 失去对自我的把握 [2]
  • 时间尺度的变化 [3]
2017阅读列表
2017-01-08

这里整理了一些2017年想读的书。除了技术书之外,今年尤其想多读一些人文方面的书籍,扩宽视野 :) 有什么想到的还会在这里补充。

UPDATE 6-11: 改为checklist形式,勾上了当前已经阅读完毕的书籍。

Hello, 2017;
2017-01-01

之前已经写过一次年终总结,觉得写的不太好,所以删掉重写一遍。

2016对自己来说可以来说是沉淀和调整的一年,无论是在技术上还是生活上,都能见到自己的成长。正好趁这个跨年的机会,对这个发生了许多事的2016做一个好的收尾。

扩展Unity编辑器(一):自定义窗口
2016-12-16

Unity自身提供的编辑功能是很强大,但也是受限的。在构建游戏的过程中,如果我们只能依赖于Unity自身的对象编辑功能,在很多地方将无法满足开发效率和工作流的需要,例如如下的场景:

  1. 制作一个有对话系统的RPG游戏,想要把对话的选择条件、编辑和跳转可视化;
  2. 想用行为树来建模怪物AI,并且需要一个编辑行为树节点的可视化编辑器;
  3. 在制作2D tile-based(基于网格)的游戏时,需要一个能对齐到网格的地图编辑器;

这些都对编辑器的功能提供了新层次的要求:简单修改对象内部的值并不够,还需要提供一种能自定义的、有意义的编辑方式。

所幸Unity在自定义编辑器方面,提供的支持相当齐全。我最近就通过Unity的自定义编辑器接口,实现了一个2D基于网格的地图编辑器,也想借此机会把学到的知识整理一下。

这篇文章是这一系列总结文章的第一篇,主要对Unity提供的扩展窗口的接口和绘制窗口的方式进行介绍。

协变与逆变 - 常见语言泛型变性机制的讨论
2016-11-03

前两天在看Twitter的Effective Scala的时候,看到了一些关于类型协变性的讨论。
之前虽然断断续续的看过一些讲协变性的文章,不过感觉果然还是没搞清楚呢……
于是花了一个晚上和半个早上的时间整理了一篇学习笔记,也算是了解了怎么回事。

// Type system is indeed interesting :-)

Update 2016.11.3:在学完Kotlin以后添加了关于Type Projection的小节。

What’s Variance

首先,变性(Variance)是什么?简单的来说,它是用来处理复合类型的类型转换的一些规则。
常见的复合类型有数组和泛型类。当我们在讨论类似这样的问题:

  • List<EntityPlayer> 是否能被转型成 List<Entity>
  • 一个 Object[] 的引用是否能接受一个 String[] 类型的引用?

的时候,我们就在讨论复合类型的变性。

通常来说,变性分类为以下三种(假设 ASubA 的子类):

  • 协变性 (Covariance): List<ASub> 是一个 List<A>,反之不成立。
  • 逆变性 (Contravariance): List<A> 是一个 List<ASub>,反之不成立。
  • 不变性 (Invariance):List<ASub> 不是一个 List<A>List<A> 也不是一个 List<ASub>

这里的” AB “的意思是:一个 B 类型的引用可以接受一个 A 类型的引用。可以通俗的理解为
AB 的子类。简单的来说,协变保持了类型参数的继承关系;逆变则逆转了类型参数的继承关系。

如何构建想法——关于游戏的头脑风暴
2016-10-13

在国庆期间,我和LI的小伙伴们一起进行了一场国庆的冲刺开发。在这一过程中,我们快速的体验了构建一个游戏想法,并把它付诸实现的完整流程。在这个过程中存在着很多的遗憾和不足,但总还是收获颇丰。最重要的一点,大概是更深的认识到了策划和构建策划的过程的重要性。经过这次开发冲刺以后,我们根据之前交流中存在的缺陷与不足,总结出了一个比较合理的构建策划的工作流程。作为学习的一环,将这方面的想法在这里完整的记录一下。

1. 游戏如何变得完整

在开始正文之前,有必要重新讨论一下游戏策划的重要性。都说游戏策划是游戏开发的重要指导,具体来说,应该体现在下面几个方面: