游戏邦在:
杂志专栏:
gamerboom.com订阅到鲜果订阅到抓虾google reader订阅到有道订阅到QQ邮箱订阅到帮看

我从独立开发中所学到的6件事

发布时间:2014-08-04 15:12:07 Tags:,,,,

作者:Mike Shafer

介绍

在创造《Bain’s Redemption》时,我是作为一名程序员加入这个项目。最终我却发现自己做了射击,业务,市场营销以及一些美术等工作。以下是我从中学到的6件事,并希望它们能给其他游戏开发者带去帮助。

1.使用一个项目管理解决方案

我父亲告诉我,他曾经了解过的每一个成功的项目都是由具有较高组织能力的人所领导的。游戏开发也是如此。你需要让你自己和你的团队拥有一些有组织的项目管理包。这似乎听起来很昂贵?但事实却非如此。你只需要支付每个月不到10美元的虚拟主机费用,然后安装它们所提供的一个免费项目管理包便可。

Bugzilla怎样?

从问题追踪角度来看的话,Bugzilla很棒(也就是你可以在玩游戏的时候找到问题)。这并非事先计划好的。事先计划要求一个项目管理解决方法,除非你想要通过执行功能去修改漏洞,那么你便可以使用Bugzilla。我更愿意将其区分开来。不管你决定做什么,你最好能够确保你拥有某些内容,并且这些内容能够保证团队集中注意力。

当安装了PM解决方法后,我们注意到这推动了制作的发展。理想情况下,你想要提供给你的团队他们喜欢做的任务,这也是我所尝试着去做的事。

tmscreencap(from gamasutra)

tmscreencap(from gamasutra)

我们的项目管理解决方法

2.不要害怕承认更大的公司能够更好地完成某些事

对于《Bain’s Redemption》,我创造了一个完整的布娃娃系统,并伴随着一个GJK+EPA碰撞算法,即关于Bullet,Havok和PhysX有能力做某事(我认为对于后面两者,你能够选择使用GJK+EPA)。我最终学到的便是这一算式更适合不同相撞的物理模拟插件程序,但一些形状组合会要求特定的算式。假设我已经完成了这一算法的执行,因为它将作用于任何凸形组合。不幸的是,箱子堆叠是衡量你的物理引擎能否发挥作用以及我花了太多CPU功耗去确保一个10个箱型柱足够稳定的方法。为什么?因为你使用了所谓的盒子剪裁工具去进行箱子堆叠。此外,你也需要速度和位置解决方法。我并不想赶走任何人,但这的确是我所学到的。

所以关于这一算式到底发生了什么?因为我们决定使用NVIDIA的PhysX,所以它最终被无视了。从性能上看,PhysX更加出色(任何物理包都需要一个重叠的宽阶段测试,这也是我的物理元素所缺少的内容),并且能够免费用于PC上。20多名程序员在自己还是孩子的时候便一直致力于创造一个物理包。我仍然从中学到了许多关于解决方法和物理碰撞的内容。并且知道使用任何物理包都是小意思。根据物理引擎设置参数对于获得预期的行为真的非常重要。这并不是什么微不足道的内容,我很高兴自己所做的所有事,但我是否拥有额外的6个多月开发时间去接受我不能独立完成的工作的事实?

3.了解你的用户

我们都知道这一点。谁是你的目标用户?当然是玩家。但是是怎样的玩家呢?我想做的是想象其它获得成功的游戏并说道,‘如果他们喜欢游戏X,他们就会喜欢《Bain’s Redemption》。’这是一个很好的市场营销参数,并且你需要尽早明确这一点。当我们决定创造《Bain’s Redemption》时,我们想要执行一些像漫画之类的内容,但却是针对于成人。同时,因为我们喜欢《恶魔猎人》的机制,所以我们创造了一些能够同时结合这两个理念的内容。现在谁会喜欢我们的游戏呢?那些喜欢漫画书的人将会喜欢它。那些喜欢砍砍杀杀游戏的人将会喜欢它。同时,我们游戏中的模型还比今天所看到的内容更加简单。这是因为我们早前便决定好每个模型应该是能够使用锋利的武器进行切割。我们现在谈论的是被切割的完整的模型,而不只是一支腿或一支胳膊。这意味着你可以使用武士刀去剥下某个人的皮。这听起来很酷,但图像将会受到影响。这也会将我们的产品局限于某个立基市场中。

webscreen(from gamasutra)

webscreen(from gamasutra)

《Bain’s Redemption》中切割模型

4.定制引擎需要大量工作

许多独立开发者将Unity作为他们的引擎,或者随着Unreal的全新定价系统的出现,他们转向了Unreal 4 Enigne。不过我们最终为了不浪费钱而决定使用自己的引擎。我们的编辑器完成了工作,但它还需要完成更多工作,只是为了完成游戏,我们暂时将其搁置了。所以我并不确定定制引擎开发是否适用于所有人,但如果你选择了这条路,你就需要万分小心。例如,我们花费了一周半的时间在我们的引擎上执行god rays。但是如果使用之前提到的两款引擎的话,我们便能立刻进行使用。HDR Bloom又花了我们两周的时间去执行,同时如果是基于另外两款引擎的话,我们也能够立即使用。每个引擎/编辑器组合都有其怪癖,但除非你真的具有上进心并想要从头了解某些内容,否则你便可以直接选择Unity或Unreal。

5.切忌在数据驱动的开发方面做得太过分

所以在游戏中(游戏邦注:或者任何其它计算机应用中),你总是拥有两件元素,即数据和代码。大多数游戏拥有一个美术文件包,即数据,还有一个可执行文件,即代码。这也是为何这被称为游戏引擎的原因,因为代码是循环运行着,它会抓取数据并在你的屏幕上分解出很棒的颜色。我们都知道受数据驱动的应用是很容易进行调试的。你觉得什么更好?是你能够往里面加载特殊的FX,进行预览然后将其保存为FX美术文件并通过代码在游戏中呈现你的特殊效果的特殊FX编辑器?还是为你拥有的每一个效果创造定制代码?后者已经有人做了,这真的是件难办之事。还要进行许多复制和黏贴,并且这并不是很有组织性。如果是受数据驱动的话会更好。此外,当你与设计师共事时,受数据驱动的开发是必要的,设计师想要看到的是参数而非代码。参数也是数据。我们的游戏拥有一个状态机编辑器。结果便是它能够有效作用于Bain的攻击和动画。我想要使用状态机编辑器在我们的游戏中创造带有状态的每个对象。我很快便意识到这是过度的受数据驱动的开发。为什么?因为没有一个设计师将着眼于一个复杂的AI状态机,相反地他们会说:“敌人一直射击我,要缓和这种情况。”此外,我们为了在行为树中使用Selector/Sequence/Parallal结构而修改了AI,我认为这对于大多数设计师来说都太过复杂了(似乎在Unreal的引擎中还存在一个行为树编辑器)。我仍然觉得大多数设计师会觉得它很难使用并会请求程序员的帮助。所以简而言之,如果设计师需要访问某些内容的话,那就将其变成是受数据驱动的开发,而如果条件允许的话,你也可以将其作为受代码驱动的开发。

statemachinecap(from gamasutra)

statemachinecap(from gamasutra)

MEH引擎的状态机编辑器

6.不要忘了尽早开始进行市场营销

我们对于《Bain’s Redemption》的Kickstarter活动将在8月末展开。因为这款游戏不管是看起来还是玩起来都很棒,所以我觉得我们只需要展开Kickstarter活动便能够获得成功。这是在我与好友Andre’ Lamothe聊天前的想法。Andre’已经写过了好几本关于游戏开发的著作,并了解里里外外的这些过程。他告诉我最好能在进行Kickstarter之前2个月便开始推广游戏。就像你所看到的那样,很多人都认为只要做出一款游戏便能够获得成功。如果没人了解自己的游戏,它便不可能被卖出去。所以请谦逊一点,接受没人知道或在乎你的游戏的事实,并想办法得到他们的关心。这并不困难。

结论

尽管在这6件事中并不包含一款优秀游戏的开发的综合窍门或者说这只是我在制作《Bain’s Redemption》中所学到的内容,但这对于任何人来说都会是一个很不错的开始。你们必须记住事先进行计划,保持谦逊态度,愿意接受改变,接受你不可能比大公司做得更好的事实(大多数情况下)并希望能够做到最棒。如此最佳方法便会降临你身边。

本文为游戏邦/gamerboom.com编译,拒绝任何不保留版权的转载,如需转载请联系:游戏邦

6 Things I Learned From Indie Development

by Mike Shafer

Introduction

In making Bain’s Redemption, I came into the project as a programmer. Eventually, I found myself doing design, business, marketing, and even some art. Here are 6 things that I painstakingly learned that I hope can help other game developers.

1. Use a Project Management Solution

My dad tells me every successful project he’s ever read about was lead by highly organized people. Game development is no different. You need to get yourself and your team some kind of organized project management package. Sounds expensive? Not really. Just pay for web hosting which you can get for under $10 a month and then install one of their free offered project management packages.

How about Bugzilla?

Bugzilla is good from a problem tracking perspective (i.e. you played your game and you found a problem.) This is not planning ahead. Planning ahead requires a project management solution, unless you want to mix your bugs with features to-be implemented, then you can go with Bugzilla. I rather keep them separate. Regardless of what you decide to do, make sure you have something and it keeps your team engaged.

We saw a boost in production after we installed our PM solution as you would expect. Ideally, you want to give your team tasks they like doing and that’s what I tried to do.

Our project management solution

2. Don’t be afraid to admit bigger companies can do something better

For Bain’s Redemption, I made a whole rag-doll system complete with a GJK+EPA collision algorithm just as Bullet, Havok, and PhysX is capable of doing (I think in the latter two, you have the option of using GJK+EPA). What I eventually learned was that this algorithm is nice for the plugging-in of different shapes for physics simulation, but some shape pairs require specialized algorithms. I assumed I was done when I implemented this algorithm because it would work with any convex shape pair. Unfortunately, box stacking is a measure of how well your physics engine works and mine took way too much CPU power to make a 10-box column stable. Why? Because you use something called box-clipping for box stacking. Furthermore, you need velocity as well as position solvers. I don’t want to nerd anyone out, but that is the reality of what I learned.

So what happened to this algorithm? It sits there and gathers dust, because we decided to use NVIDIA’s PhysX. PhysX was superior in terms of performance (an overlap broadphase test is absolutely required for any physics package which my custom physics lacked) and it was free for the PC. Well no duh, a package made by 20+ programmers that have been doing it since they were kids is going to work better than something you can cook on your own (usually). Still I learned a lot about solvers and physics collision and what not. And using any physics package is cake. Setting the parameters to a physics engine is very important for getting the desired behavior you’re looking for. It’s not trivial and I’m glad I did what I did, but could I have saved 6+ months of development time just accepting that I couldn’t do it on my own? Absolutely.

3. Know your audience!

This one is a no brainer. Who are you targeting? Well duh, gamers. But what kind of gamers? What I like to do is think of other games that are successful and say “if they like game X, they will like Bain’s Redemption.” This is a good marketing metric and it needs to be decided early as you’ve probably read countless times. When we decided to make Bain’s Redemption we wanted to implement something like a cartoon, but for adults. At the same time, we decided that we liked the mechanics of Devil May Cry (mainly the idea that you can have modern pistols with an archaic sword) so we made something that was the marriage of these two ideas. Who will like our game now? People who like comic books will like it. People who like hack-and-slash games will like it. Also, our models in our game are much simpler than what you see today. This is because we decided early on that every model shall be cuttable with sharp weapons. We’re talking about the entire model being cut, not just a leg or an arm. Which means you can banana peel someone with a Katana. It’s cool, but graphics will take a hit. Still it builds a niche for our product.

Cutting models in Bain’s Redemption.

4. Custom engines are a lot of work

A lot of indie developers go with Unity as their engine or with the advent of the new pricing system for Unreal, they go for the Unreal 4 Engine. We decided to go with our own to avoid paying any fees to anyone. Our editor gets the job done, but there is a lot of work that needs to be done on it that we just put on the back burner because the game needs to be completed. So I’m not sure custom engine development is for everyone, but if you do go down that route, be very careful. It took us a week and a half just to implement god rays in our engine, for example. They come out of the box for the two aforementioned engines. HDR Bloom took another two weeks to implement, it comes out of the box for the other two. Every engine/editor combo has its quirks, but unless you’re really self-motivated and want to learn how things from the ground up, go with Unity or Unreal.

5. Don’t overdo data-driven development

So in a game (or any other computer application), you have two things, you have data and you have code. Most games have a packed art file that is the data and an executable that is the code. This is why it’s called a game engine because the code is running in a loop and it grabs the data and spits out pretty colors on your screen. It’s well known that data-driven applications are cleaner, easier to debug, and just all around better. What sounds better to you? A special FX editor that you can load special FX into, preview them, and save them out as FX art files, then display your special effects in the game via code? Or creating customized code for every effect you have. The latter has been done and it’s a logistical nightmare. There is a lot of copying and pasting of code going on and it’s just not clean and organized. It’s much better to be data-driven. Furthermore, when you work with designers, being data-driven is required, designers want to work with parameters, not code. And parameters are data. We have a state machine editor for our game (see below). Turns out, it works great for Bain’s attacks and animations. I wanted to make every object with state in our game use the state machine editor. I soon realized that this was too much data-driven development. Why? Well, no designer is going to look at a complicated AI state-machine, instead they might say “that enemy shoots me too much, tone it down.” Furthermore, we revamped our AI to use Selector/Sequence/Parallal constructs in Behavior Trees and I think it’s too complicated to use for most designers (still it looks like there’s a Behavior Tree Editor in Unreal’s engine). Still I think most designers may find it cumbersome to use and will ask a programmer to at least help them (it has features like how often per frame something should run–just really nerdy stuff that designers would have trouble with). So in short, if designers need access to something, make it data-driven, otherwise you’re free to make it code driven if it’s appropriate.

State Machine Editor in the MEH engine.

6. Don’t forget to start marketing early

Our Kickstarter for Bain’s Redemption is slated to launch at the end of August. I thought I could just launch the Kickstarter and it would be a success due to the fact that the game looks and plays well. This was before I talked to my friend Andre’ Lamothe. Andre’ has written many books on game development and understands the process inside and out. He told me that I’d want to start marketing the game 2 months before the Kickstarter. You see, many people think they can just make a game and it will be successful. If nobody knows about your game, it will not sell, period. So humble yourself, accept that nobody knows (or cares, yet) and make them care. It’s that simple.

Conclusion

While these 6 items did not comprise an exhaustive list of good game development tips or what I learned in making Bain’s Redemption, it’s a good start for anyone. Remember to plan ahead, be humble, accept changes, accept you can’t do it better than big companies (most of the time) and hope for the best. The best may just come to you.(source:gamasutra)

 


上一篇:

下一篇: