文章

EMwI插件启用失败的问题

有几名External Media without Import的用户向我反馈说插件启用失败,提示语法错误。其中还有一名用户就此问题在github上向我提了一个issue。具体的错误提示是Parse error: syntax error, unexpected T_STRING in …….external-media-without-import.php on line 25。

然而external-media-without-import.php的第25行仅仅是一个名字空间定义:

经过调查与沟通,发现原因是用户使用的PHP版本低于5.3.0,而PHP到了5.3.0才引入名字空间的特性,见PHP 5.3.0 Release Announcement。起初用户以为自己的PHP版本是5.6.30,但依据经验我猜测对方机器上可能有多个PHP版本,并且WordPress使用了较老的PHP。后来用户在自己的WordPress上安装了Display PHP Vesion插件,果然发现WordPress用的是PHP 5.2.17。

因此各位用户如果遇到这个启用失败的问题的话,请用Display PHP Vesion插件查看一下WordPress所用的PHP版本,确保PHP是5.3.0或更高的版本。

想不到那么老的PHP版本都还是有很多国内外用户在用啊。

用UGUI Slider做血条时遇到的一个小问题

前段时间想在小游戏中做一个血条UI,自然而然地想到了用UGUI的Slider。

在Unity中可以通过编辑器菜单一键创建一个Slider。这样的一个Slider里会包含Background、Fill Area和Handle Slide Area三个部分。其中Handle Slide Area就是滑块。血条不需要滑块,因此要将它删掉。

刚用编辑器菜单创建的Slider。需要将Handle Slide Area也就是滑块删掉。

我以为将滑块删掉就万事大吉不用改了,谁知却遇到一个问题。Value为0的时候,血条在表现上还有残留的血量:

Value为1的时候,血量却还没填满整个血条:

后来发现要将Fill Area及其孩子Fill的Left和Right都调成0才行。这样问题就解决了。

这里Left是指UI控件的左边缘相对于Anchors Min X的距离,Right是右边缘相对于Anchors Max X的距离。

在东京参加Global Game Jam 2018

去年在回答知乎的问题《参加 Global Game Jam 2017(全球游戏创作节) 是一种怎样的体验?》时,我就表示希望今年能够参加日本区的GGJ。现在如愿以偿。本篇GGJ记事会分为以下几部分来讲述这次在东京参加Global Game Jam 2018的体验:

  • 日本GGJ的特点

此次东京GGJ跟去年我在广州天河站的体验相比,主要有以下几点不同:

  • 规模小

东京虽然是个超大型城市,但这里的GGJ规模比起广州却小得多。此次GGJ在东京都一共有4个会场,可所有会场加起来恐怕都没有北上广深的一个会场大,尤其每个会场的报名名额还十分有限。大概是因为在东京很难找到中国那样的大场地吧。最大的场地在东京工科大学,定员100人,却没报满。其余3个场地都是借用企业办公楼的会议室,所以场地小,全是定员20多人。我因为更想接触一下业界的人,也想体验一下小会场的感觉,所以选择了定员24人的BeXide会社。然而这个站居然也没报满。

BeXide会社的会场站点入口

继续阅读在东京参加Global Game Jam 2018

Game Jam头脑风暴训练

很久没更新博客了。自从去年9月底开启我的海外生涯以来,这4个月里一边上学一边工作,忙得呜呼哀哉。半个月前辞掉国内的Web开发工作后(这里还是要再次感谢前领导左哥给了我那么久远程工作的机会),终于得以将精力投入到在日本做游戏的道路上。

通过去年在Global Game Jam认识的独立开发者Fair的介绍,我幸运地结实了正在日本创业的《次元树之战》的开发者云海。接下来我会加入他的团队一起做事情,也会跟着他学习游戏设计。

云海凭着兴趣自己做的游戏《次元树之战》。知乎上还有一篇对他的采访:https://zhuanlan.zhihu.com/p/20146045

彼时辞职时正好赶上云海约团队的四个人一起出来做game jam头脑风暴训练。正好那时离Global Game Jam 2018还有一周多,可以顺带当作热身。

继续阅读Game Jam头脑风暴训练

EMwI插件更新:防XSS攻击

8月底的时候External Media without Import插件在github上收到一个pull request。对方指出我的代码存在XSS漏洞。惭愧,直到最近才腾出时间仔细研究他说的问题。插件的1.0.2版本合并了对方的pull request,修复了该漏洞。

在修复之前,我的插件中有如下代码(点击查看源文件):

这个函数将width 、height 和mime-type等信息通过 urlencode编码后设置为url的参数,然后重定向到该url。在url的响应函数中,我调用了 urldecode读取来这些信息: 继续阅读EMwI插件更新:防XSS攻击

《游戏设计梦工厂》练习1.2 D.O.A.

找一个你玩过的D.O.A.(dead on arrival,是指一个游戏玩起来完全没有任何乐趣,一上市就被认定失败)的游戏。写下来你喜欢这个游戏的哪些部分。哪些部分是设计师忽略掉的?这个游戏可以如何提高?

基本上能被我玩到的游戏都是在上市后至少活了一段时间的。上市就被认定失败的游戏也无缘被我知道。目前我能想到并玩过的存活时间最短的游戏恐怕就是我刚工作时参与开发的一个MMORPG——《寻龙》。这款游戏上线后一年不到就停运了。

运营不到一年就停运的游戏《寻龙》

《寻龙》的失败有多方面的原因,包括设计、技术和运营等。但是这个作业练习仅谈论设计。

继续阅读《游戏设计梦工厂》练习1.2 D.O.A.

开始用数位板

在短暂的画室课程结束之后,我决定还是立刻上数位板,毕竟未来还是主要想在电脑中进行创作。不过考虑到自己目前只是一个刚入门的画渣,买影拓这种高端专业设备太奢侈,所以还是先买一块价格比较亲民的Bamboo学习板,型号是CTL-671。

连好板子之后得装驱动,否则就没有压感,板子就只能当鼠标使。驱动可以从Wacom官网下载,不过一定要认准板子型号。装好驱动后在Mac的系统偏好设置里就会多出Wacom一项,在里面可以调节板子压感和左右手使用习惯。 继续阅读开始用数位板

静物写生

这是我在画室的最后一张习作,也是进入画室后的第一张静物写生。其实直到6月中旬离开画室的时候,这张习作都还没完成,只画成下面这个样子:

火龙果上的细节还是请老师帮忙画的。衬布和玻璃杯都不知该如何下笔,尤其不知该如何在体现玻璃杯结构的同时又能体现其透明材质。但是就这样空着的话那画面也实在太苍白失衡,太没诚意了。

后来一直忙,也没来得及继续琢磨这幅画,就这样间断了三个月。然而下周就要去日本留学了,我也懒得把架上绘画的这堆东西都带着,便决定抽时间尽量完成这幅画。于是最后画成这个样子:

我觉得我尽力了……最后我用纸笔塑造了一下玻璃杯的质感,并且根据自己的理解和想法给衬布加上了阴影,给桌面加上了一些变化。至于瓦罐表面的材质高光,我直接放弃了。这张写生怕是超出了我当前的绘画能力。

理解Blender的表面细分修改器

以前一直不太理解Blender的表面细分修改器(Subdivision Surface Modifier,简称Subsurf)究竟是按什么规则来切割模型上的面。直到前段时间看了上篇文章提到Andrew Price的视频才理解。表面细分的规则是:给定三个顶点组成的两条相交线段,subsurf会构造一条曲线,使曲线和两条线段的中点相切,如下图所示。

不过因为模型中的线都是直线,所以Blender只能是用多条直线逼近这条曲线。细分次数越多,就越能逼近这条曲线。我们以一个四个顶点组成的平面模型为例,给这个平面添加一个表面细分修改器。细分次数为1是如下样子:

继续阅读理解Blender的表面细分修改器

Blender中的3D杯子

在画室刚开始学画静物,临摹一个杯子的时候,我卡在了杯子的把手上。当时我曾想着要在Blender中做一个杯子,好好观察解析一下把手的结构。但是直到最近我才有时间把这杯子做出来:

这杯子是我参考一个YouTube视频做出来的:Blender Beginner Tutorial – Part 5: Modelling

通过这个视频我还理解了Subdivision Modifier的原理,并学会了用Loop Cut和Inset Faces将subdivision构造的曲面局限在某个区域,并消除subdivision带来的一些artifact。

来张素描原画和3D模型的对比,附上3D模型的结构解析:

继续阅读Blender中的3D杯子