WahooTank 2014

自去年8月份,到2月份底,历时半年,WahooTank推出了IOS封测版本。

新手引导CG动画,直接上unity做的

丰富的PVE关卡

国战: 天下三分,割据一方

PVP队列式攻城

多样的其他PVP

WahooTank英雄分不同的职业,各自拥有不同的英雄特征技能,就像LOL。目前21个英雄,看看英雄池:

欢迎朋友,联系交流

Bye, 2014

自7月底离开了wy,我加入了wh公司,从事unity3d 3d手游开发。直到12月底,开发出了一个alpha版本,并且公司拿着这个版本到各地去展览,发给了很多运营商。一路走过来,整整5个月的开发周期,满满的都是奋斗的记忆。

基本上我们每一个月都会出一个版本,9月,10月,11月,基本上月月最后的日子都是通宵,座着早上的那最早的一班车回家。12月,我们的版本可以说是个大得提升,基本功能都完成了。1月的版本可以说是一个alpha的版本了。在开发过程中,遇到了很多的问题,包括unity assetbundle打包机制的问题,这个可以说是个坑,没有把握好的话,很容易内存爆了,手机上直接闪退。性能问题也很严重,记得一次准备发版本,由于在ipad上只有15+左右,而在iphone却有60fps,导致版本发送延期,好早第二天就发现了问题,并及时解决了这个bug。手机开发不像页游那样,内存占用、性能流畅相当重要。内存占用一大,直接闪退,而不知所措。游戏不流畅,给人感觉是立即能体会的。现在基本上手游都是3d的,现在比拼的是3d动作手游,可见竞争是如此的激烈。

2014年,我开始了一个新的尝试,总体的来讲,还是可以的。因为问题并没有压倒我,反而让我3d技术得到了很大的提升,接下来,我应该更加提高自己的3d游戏设计水平,争取能自己开发端游。这不是梦想,这将是2015的挑战。

算算,自13年开始创业到现在,整整2年的光阴。创业确实很辛苦,我走的实在太快了,以至于很多东西都没有来得及去体会,去静静的思考片刻。再见了,2014!这个世界最宝贵的东西,莫过于时间了,因为你一去不复返!

2015希望能多静一静,而后提升自己的技术,做人的新境界。相信我,能做的更好!

Unity3D项目开发坏境部署

首先,毫无疑问的是unity3d软件的安装。如果你需要开发ios8的应用,因为ios8已经发布了,所以你必须安装unity4.5.4+上的版本,否则发布的ios8应用将有bug。比如屏幕无法实现旋转的bug;ios8默认使用open es3.0进入渲染,而unity默认是open es2.0.新版本已经修复了这些小得兼容性问题。

开发代码的ide,在windows我建议的是visual studio 2012,加上unityvs。这个组合应该是最完美的。写代码可以利用vs一套良好的用户体验,同时microsoft收购了unityvs,现在他们的组合更加完美,你可以更加协调的各种断点调试,开发变得更加轻松了。
在mac下,我推荐的时Xamarin studio,我目前使用的是最新版本v5.4。同样是studio,这个和vs还是差距很大的,各种bug的存在,经常消耗2.7g+的内存,开发一阵子就要重启一下ide。断点调试更是没法实现,只能debug.log。这个应该是最大的缺陷了。不管怎么讲比unity自带的mono develop靠谱,至少支持中文书写在ide中。

项目开发,就得使用svn。在windows下还是sub version,这个也是一直使用的。在mac下我使用的时Cornerstone v2.7。目前发现这个应该是最靠谱一些的。中间使用过Versions,发现了很多的bug,完全不靠谱。对于一些scene文件来说,也就是.unity文件,是二进制方式存储的,因此编辑的时候,可以lock一下,防止别的程序员进行了操作,而无法合并工作。文本文件,比如代码,是可以合并的。同时注意的是提交svn,需要把.meta一起提交,因为这个文件是unity内部使用的,unity认为这个代表实际的文件,有一个guid,和md5值。进行版本控制的文件夹只需要Assets, ProjectSettings就好,其他文件可以加入到ingore list里面。依次点击edit -> project settings -> editor. Asset Serialization Mode我使用的是mixed, 不强制使用文本或者二进制类型,按照文件本身的类型存在。Version Control Mode建议Hidden Meta Files.

总结一下:

windows:unity + visual studio 2012 + unityvs + subversion

mac ? ? ? ?: ? ?unity + xamarin studio 2 + Cornerstone

如果团队里面有mac,windows用户,记得unity版本保持一致,同样svn协议也应该一致。

Focus on Unity3D

7月底,我离开了创业1年半之久的wy公司。这里面的种种因素,待日后再慢慢絮叨吧。最根本的原因其实就是我们没有把握好市场,没能取得大得成功。这对于成员来说是很大的创伤。游戏产业变化是日新月异的,仿佛就在一日之间,Flash渐渐的淡出了人们的视线。

自06底,我开始从事as游戏设计,到今年差不多7个年头了。去过很多公司,也认识很多的同事。技术上编程能力提升很大,能够按着自己的思路编程,就是自己想得和结果几乎一直,这是一种快乐。这其中要感谢我发展中得一些朋友,没有他们,我的路不会这样平坦。谢谢!总结一下,一个靠谱扎实的技术总是会收到朋友的青睐的。所以只要你人诚恳,有信用,技术扎实,喜欢结交朋友,是一定会有好的舞台,路也会很宽广的。

现在,我加入了unity3d手游公司,从事3d手游开发。以前都是做些flash3d的研究和小开发,现在我得程序理想得到了现实。到目前为止,我基本上没有碰到技术障碍,主要是我们不涉及很深的3d技术,同时unity很多方面帮你考虑好了,比如投影,描边shader,泛光shader,粒子engine等。目前来看,我设计的战斗得到了认可,希望我能做的更好。

unity3d确实是一个很好的技术,虽然不开源,但是开发效率很高,工作流很高效。推荐大家使用!

基于保密因素,我没有发我们游戏demo截图。接下来,我将更新unity3d技术文章。期待你得关注!

6.1儿童节快乐

一晃眼,小家伙都1岁多了,今年的6.1儿童节到来了,祝愿peng天天开心,快乐成长噢!估计过一阵子,小家伙就会到处跑动了,哈哈,这是一个大大的进步噢。

难得的三天假期,算一算只能到中秋节,也就是9月份的时候才能有3天的长假。由于工作的原因,我一个周末只能陪小家伙一天,晚上我回家的时候,他基本上都要睡觉了,所以算算一个年我真正陪陪的时间很少的。不过小家伙不会怪我,因为我要去为这个家撑起一片天,为了他的未来,我应该,也有责任去努力,让他过的更好。创业开始的日子,也就是小家伙出生的日子,如今事业没成,坎坷艰辛,我也在想自己整天在做什么尼。一个事业成不成,都是人事决定的。不会人事,也只能没有一个结果。

三天天气一直不好,憋在家里,好好陪着他。他也过的甚是开心,一直喊我,也是一种很大的幸福噢。无聊之余,便用cocos2d-x给宝宝设计了一个儿童节快乐的小游戏。很简单,touch屏幕,生成会飞动的气球。

cocos2d-x 3.0在发布生成方面进步很大,细节都又python搞定,感觉十分方便。我只需要关注开发上面。相对于而言,cocos2d-x学习体验比起unity实在是差太远了。所谓的api文档就是代码接口,一点用处也没有,因为没有实例。问过高手,他们都说自己去看demo。目前学习下来发现,资料很少,很多东西只能依葫芦画瓢,慢慢熟悉。我觉得最好的学习方法还是看看源代码,然后结合demo,这样学习速度应该是最快的。

五月小家伙一直是生病的,感冒发高烧,妈妈和他的奶奶都很揪心,不过小家伙基本康复了,哈哈。

小家伙,节日快乐噢~!加油!

DragonHero

一段时间的努力,unity3d方面的技术得到比较大的提高。设计了几个demo,用于测试unity在渲染3d,2d游戏方面的技术性能。

1 MyTank

这个是一个第三人称坦克大战demo。Test(space shot)

使用unity自带的Terrain组件,很快速的编辑了一个野地战斗地形,四周环绕的高山,中心一个适合战斗的平地区域。测试发现,自带的地形组件不适合手机上开发地形,应该采用地形模型,然后带贴图的方法实现。具体是原因是因为解析度的缘故,手机的gpu性能和pc差距还是很大的。
打开navigation功能,点击bake,烘烤场景,实现场景节点导航信息的收集。为gameobject添加NavMesh Agent组件,从而实现对象在场景中的寻路。这样我们的敌方坦克就会自动寻路攻击那些进入可攻击范围的敌人。
场景里面的特效,比如爆炸,攻击特效都使用unity自带的particlesystem实现。目前使用下来发现,功能比起away3d的粒子特效工具Sparticle要强大,功能实现的比较完整吧,只要你想要的特效,基本上都能实现掉。
这个版本实现了一个移动方向控制组件,unity目前的自带的ui很弱,我使用了gui实现了一个Joystick。

2 DragonHero

这是一款比较完整的小游戏,仿照目前appstore上很流行的智力游戏three设计。我和以前同事xia一起共同完成,我负责程序这块。Test(mouse drag)

这是一款很有意思的益智游戏,每次移动一格,一旦这个格子移动到了终点则不可移动,如果一个格子移动到另一个相同的格子上面的时候将出现合并的情况。新的棋子将会出现,并且大概率出现在合并的那一行上面。同时移动格子是可以预移动的,因此你可以撤销当前操作只要你没有松开手指。

因为是一个2d游戏,主要是界面元素的一些东西,大量使用ngui组件。主要的设计重点是合并算法,预先移动算法。算法本身都不是很复杂,需要结合unity自身的一些特点,书写代码。

这次的合作很顺利,大家都很配合,希望一起努力吧!做自己喜欢的事情,无拘无束的,很开心!;)

Cocos2d-x 3.0开发环境配置

在手游火爆的今天,各种新的技术层出不穷。最近在研究cocos2d-x,感觉这个技术很赞!将c++的代码编译成so,然后在android机器上以linux运行so的机制运行,试试了下效率很给力,而且文件大小很小。看看api就是cocos2d engine的那套,很给力的技术,应该好好的学习一下。还有lua,javascript技术的加入,简直太nx了。之前研究过cocos2d-x 2.x的版本,生成一个apk过程很复杂的配置,各种命令行,编译太麻烦了。3.x的版本基本可以说是傻瓜模式的。本文的目的是:从开发环境配置里面解脱出来,你只要关注开发game就好。

1 预先条件

操作系统:windows7+ 或者 mac os x 10.7+(xp不知道能用不?)

编译器:vs2012+,或者xcode 4.6+(因为cocos2d-x 3.0用了c++ 11的特征,必须有新编译器支持)

python 2.7.5(cocos2d-x的脚步系统都是基于这个的),在path环境变量中加入python.exe的路径。

cocos2d-x 3.0 下载:GO

2 环境搭配

1> Java环境

下载地址:GO。设置环境变量,创建环境变量JAVA_HOME,变量值中输入java的存放路径。点击path,编辑,然后输入;加入%JAVA_HOME%\bin。这样就把java的一些exe程序暴露给了cmd,cmd可以直接访问到对应的程序。如下图:

输入: Java -version。 如果出现版本信息,说明搞定了。

2> Andorid SDK。(ANDROID_SDK_ROOT)

下载:GO。解压到一个目录,包含三个文件:eclipse,sdk 和sdk manager.exe文件。同样创建环境变量ANDROID_SDK_ROOT,输入变量的值,我的路径是:G:\adt-bundle-windows-x86_64-20131030\adt-bundle-windows-x86_64-20131030\sdk。在path环境变量中加入:;%ANDROID_SDK_ROOT%\platform-tools,不要忘记;分隔符号。如下图:(我这里用的是%ANDROID_SDK_HOME%\platform-tools,概念是一样的,暴露exe程序给windows bat)

3> Android NDK(NDK_ROOT)

下载地址: GO。NDK是一系列工具的集合,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。新建一个NDK_ROOT的环境变量,设置其值,我的为:C:\soft\android-ndk-r9d-windows-x86_64\android-ndk-r9d,如下图:

4> ANT

下载ant:GO。创建一个环境变量AND_ROOT, 设置其值,并且讲这个路径加入到path目录下,以暴露ant程序给windows调用,如下图。Apache Ant,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。基于build.xml这个配置文件完成自动化工作,将so文件打包到java程序,生成apk文件。

3 编译示例

经过步骤2的准备,所以得环境配置都设置好聊,接下来编译并发布sample的apk文件。

1> 浏览到cocos2d-x 3.0的目录下,找到setup.py这个文件。cmd下浏览到这个目录输入:

 python setup.py

如果出现任何环境变量没有找到的提示,你就得回到第2部,重新设置一下。

正确的情况:

2> 在cmd中浏览到build目录下,输入:

python android-build.py -p 10 cpp-tests

-p 是设置发布的android平台的版本,10,对应的是2.3.3。19也就是最高,对应的是4.4

cpp-tests 是工程目录。一切顺利的情况如下图。如果出现错误,请检查setup.py这步的错误并修正。

浏览到cpp-tests/bin目录,可以找到apk文件。在cmd中输入:

adb install TestsDemo-debug.apk。

记得在usb设置为调试模式,否则可能安装失败。

4 创建一个新工程,并且编译apk

cocos2d-x 3.0采用聊控制台的方式创建工程,很方便。首先在命令行输入:

cocos

如果出现不存在命令提示,就说明环境没有配置好。新建环境变量COCOS_CONSOLE_ROOT,输入目录,我的是:C:\Users\harry\Cocos2dPj\cocos2d-x-3.0rc2\tools\cocos2d-console\bin,同时将这个值加入到path环境变量,以暴露cocos这个命令。记得要到bin目录下。

创建一个新的模板工程如下:

cocos new MyWorld -p com.MyCompany.MyWorld?-l cpp -d F:/CocosPj/

其中new是创建信工程的意思,MyGame是游戏名。 -p 是工程包。 -l 是语言设置,可以使cpp,lua,javascript等。 -d 是创建的目录所在地。赶紧浏览到目录,然后打开vs工程,即可编译win版本了。

android版本的编译也很方便,浏览到proj.android目录下,这个是android工程目录,输入:

python build_native.py -p 19

你可以在bin目录下,找到apk文件,恭喜你成功了。如下图:

手机运行截图:


Unity3D和游戏的梦想

这段时间接触到了unity3d,有种相见恨晚的感觉,我要是早点研究这个东西是多么的美好!

unity3d自2005诞生到现在,差不多9个年头了,现在最新版本是4.3。4.3加入了2d游戏设计的基本元素sprite,physics2d等,开发2d,3d游戏将变得如此简单了。unity3d提供了十分强大的功能,包括地形,人物动画系统,光照系统,物理、粒子系统,寻路网格,强大的工具合作流,丰富的gui组件,强大的脚本自定义,自定义shader等。这一切都所见即所得,或者很快的进行调试效果。如动态物件的光照烘培,各种camera特效,后期效果等,这一切通过添加component,优雅而亲和的方式即可完成,完全可以达到目前设计游戏最前沿的技术效果。这一切你可以很快速的进行掌握,如果你有足够的时间和精力,当然你可以研究其实现原理,让工具发挥更大的作用。在开发效率如此重要的今天,unity3d将是最最佳的选择!如今使用unity3d设计的游戏很多,中国成功的《新仙剑》、《王者之剑》等。unity3d另一个优势还有强大的跨平台,这太完美了,在移动开发如此火爆的今天!我感觉很开心,便一口气看完了那本基础教程,内心不再恍惚了,我知道自己的方向,自己的梦想了。强烈推荐给你,unity3d!也希望unity公司做的更好,为开发者而奋斗。

目前,我还处于demo的研究和学习阶段,分享几个我正在研究和学习的游戏截图:




测试地址:GO GO
Android APK: download

3D场景编辑器

经过一段时间的努力,基于Away3D的场景地形编辑器有了大的进步。主要包括几个方面:

1 ?笔刷的设计。地表可选择,笔刷可编辑大小,和硬度,可以实现地形的抖高,扁平和凹陷。目前存在笔刷过于规矩,不能很好的贴合地形,这个要重新处理下。

2 场景物件的摆放,可以随意的添加物件,调整其位置,大小,方向。

3 地形编辑采用war3一样的编辑视角,同时可以任意角度编辑查看效果。

接下来主要的方向是:

笔刷的贴合

物件摆放的高级功能,如删去等。

实时预览视图

支持英雄的添加。

直接输出高度图,实现第一人称游戏编辑测试运行。

这个编辑器的名称是:PTerrainEditor。目前有callee等协助设计。将会在功能完善的时候完整开源,如果你喜欢,请关注。

download

绑定武器特效到骨骼

讨论绑定特效,或者武器到骨骼是一个很老的话题,也是个简单的事情。接下来的叙述,真正应用到了游戏,而不是研究,所以有一定参考价值。

模型动画采用了md5格式,其实任何格式都可以,采用了away3d 4.1.x进行渲染。这里设想有几个物件。首先是武器,或者特效,定义为一个容器:mWeaponeHolder, 这个是个3d容器,具体里面可能包括多个mesh。同样的定义一个mesh,这个mesh就是人物动画的mesh,为mHeroMesh。

对于md5这样的动画来说,有一个skeleton骨架的概念,包含多个jointPose。设想一下,需要绑定武器到一个骨骼名称为”wuqiBindCenter”上面。所谓的骨骼动画是通过skeleton这个骨架来作用模型顶点来实现。需要做的事情是:确定这个骨骼在人物mesh这个容器里面的全局位置和方位。如果是绑定位置,则每帧跟随更新weapone的位置即可。如果同时包括方位,则需要更新weapon的transform来实现。具体在实际运用的时候,mWeaponeHolder可能有自己的方位了,意思就是mHeroMesh在bind之前已经定义了一个方位,需要合并这个变换。

第一步:

mHeroMesh.addChild( mWeaponeHolder );// mWeaponeHolder内部包含武器自己的mesh结果。mHeroMesh就是人物的mesh。

第二步:每帧跟随

实际效果: