今日は、日本の代表的なソフトウェア開発手法について紹介しよう。
その名も、メテオフォール型開発である*1。
第一節
通常のウォーターフォール型開発におけるプロジェクトはこのような形を取るが、
メテオフォール型開発ではこのような形が取られる。
そしてこうなる。
続きを読む
はい、というわけで今年はクソゲーを作りました。もう半月経ってる……こわい。
見ての通り、Fl●ppy bird である。クリックで上昇、何もしないと下降。土管の間を潜り抜けるとポイント追加。土管にあたると死ぬ。
アニメポプテピピックが予想以上にクソいい出来だったことを受けて、本編にあるゲーム風ドットアニメを本当にゲーム化してしまおうという一案。デザイナーである春さんが思いのほか乗り気だったので作ることに。このとき、エイプリルフールまで残り二日。
ネタの候補はいくつかあったが、結局一話のモノを採用することに、本編ではマ●オワールドのマントの挙動で上下するだけのポプ子が描かれていたが、ここに同じくマリ●っぽい土管を追加すれば Fl●ppy bird っぽいアレができるのでは? という短絡的な考えでゲームシステムの検討は終了。
なんたって、必要な素材が少ない。ポプ子ループ入れて五枚、雲、土管、UIのみ(キノコとピピ美は後から追加)。一番の懸念点もとい技術的ボトルネックは「ブラウン管風表示」だったが、難なくクリアしたのでGOを出した*1。ブラウン管表示シェーダについては後ほど解説。
*1:ちなみに、これが上手くいかなかったら作らなかった。短期ネタだけに、こういう妥協は禁物
三分で制作環境の紹介。ゲームプロジェクトのフォルダ構成はほんと人によってまちまちだが、自分は今のところこんな風に落ち着いている。これは Rabbit という名前のプロジェクトだ。
ルートフォルダと同名である Rabbit フォルダは Unity のプロジェクトで、この直下にAssets だの Library だの Project Settings など色々入っている。これに関して特に語ることはないだろう。その次に重要なのが Work フォルダ。ゲーム本体には含まれない、いわゆるゲームリソースの原型が入っている。素材を切り出す前の画面構成の psd や、タイトルロゴなどの素材、資料、外注したリソースなど。
あなたがイベントへの出展をもくろむなら、Press フォルダは今すぐにでも作ったほうがいいだろう。ゲームの詳細やスクリーンショット、タイトルロゴ、イラスト素材などを含んだプレスキットや、ポスター、チラシ、CDジャケット、ショップに提出するためのサムネイルやアイコンなど、完成系のアートワークが入っている。新しい需要が生まれるたびに中身は拡充されるが、既に作ってあったら簡単に渡すこともできる。そのつど Work フォルダを漁って提出するよりはずっと楽だ。
Output フォルダの中身はその名の通り完成品=ビルドだ。これは魔法の女子高生の output フォルダの中身だが、プラットフォームによってフォルダ分けされ、その中で更にバージョン毎に分かれている*1。なぜか mp3 が入ってたり iOS フォルダが3つもあるのは何でかって? うるせえ。
最後、Sound フォルダはこれまたその名のとおり音ファイルが入っている。ぶっちゃけ、 Work フォルダの中に入れててもいいのだが、使用頻度が高いのでルートフォルダ直下に来てしまった。この中には効果音に使えそうな素材や、BGMやら、色々ごっちゃになっている。
以上。こういうのを見せ合ったりすると結構面白いので、飲み会とか合宿で話題の種になったりするヨ。Assets フォルダの中身は次回。
*1:分かれてないこともある。めんどくさいし。
例えば string → Enum の逆引きハッシュテーブルを使いたい時などに使える奴。
static public Dictionary< string, EnumType > CreateEnumDictionary<EnumType>() { var table = new Dictionary<string,EnumType>(); foreach( var value in System.Enum.GetValues(typeof(EnumType)) ) table.Add( value.ToString(), (EnumType)value ); return table; }
static public Dictionary<string, EnumType> CreateEnumDictionary<EnumType>() { return System.Enum.GetValues( typeof(EnumType) ).Cast<EnumType>().ToDictionary( t => t.ToString(), t => t ); }
var charaid_table = CreateEnumDictionary<CharacterID>(); for( int i=0; i<100; i++ ) { string new_chara_name = LoadNextCharacterNameFromFile(); // csv 等からキャラ名を読み込む UnityEngine.Assertions.Assert.IsFalse( charaid_table.ContainsKey( new_chara_name ) ); // Debug 版では ASSERTを挟んだほうが安心 var new_chara = charaid_table[new_chara_name]; // 効率のよい逆引き AddChara( new_chara ); }
実際 csv からデータを引っ張るときは string-Enum テーブルが複数必要になったりするので、関数を汎用化して一行で書けるようにしておくと可読性が良くなる。
ランクマ。いまやどんな対戦ゲームにも実装されている、インターネットを介した対戦モードの一つである。その呼び名はゲームによってランクマッチ、ランキングバトル、レーティングバトル、ラダー、段位戦など多岐に渡るが、要は対戦の結果によって対戦相手とポイントを取り合い、モノによってはポイントに応じて段位や階級が与えられるというゲームモードのことだ。総称が無い以上仕方ないので、この記事では一番メジャーな呼び名であるランクマッチを便宜上採用する。
ランクマッチはどんな対戦ゲームにも当たり前のように実装される一方で、ゲーム開発者がこのシステムについて完全に理解しているとは言い難い。ランクマッチはヘビーユーザのために用意されたシステムで、その真価を理解するには同じゲームを数ヶ月間、何も知らない初心者から最上級者になるまで遊び続けなければならないからだ。日常的にゲームを遊ぶ開発者すら割合としては少ない昨今、一つのゲームをここまでやり込み、そのシステムを肌で理解している開発者はごく僅かに過ぎない。
断言しよう。殆どのランクマッチはクソである。ランクマッチを実装している開発者がランクマッチのことを理解していないからだ。
一方で、ようやくランクマッチにも主流と呼ばれる一つの解がいくつかのゲームで見られるようになってきた。この記事ではランクマッチを理解していない開発者がランクマッチを実装したときに起こりうる四つの勘違いと、生まれつつある最適解の一端を考察していく。
続きを読む
ビットコインが盛り上がっている。
さすがに、そろそろ一度も名前を聞いたことが無いという人は居ないだろう。ニュースになったり、億万長者が出たり、詐欺が起きたり、池上彰に解説されたり。国内大手である取引所の bitFlyer の CM も、ゴールデンタイムでよく見るようになってきた。
しかし、多くの人たちにとって、ビットコインに対する認識は同じだろう。得体の知れないもの。一体ビットコインとはなんだ? と。
ビットコイン決済のようなものは最近増えてきたが、まだまだ多くの暗号通貨は使い道を持たないのが普通であり、その価値は直感的ではない。通貨といえば、古くは米や穀物、金貨に銀貨、宝石など、そのものの価値が担保されていることが一般的であり、国家というとてつもなく大きな規模の保証人がいて初めて硬貨や紙幣のようなものが存在しうるくらいのものだ*1。にもかかわらず、未だ取引においてはアフリカにおけるクレジットカード並の利便性しかないビットコインが、登り龍のように価格を上げ、やがて既存の通貨を超えるとまで言われている。これは一体どういうことだろうか。
ビットコインの価値の源泉。それは、とあるシンプルかつ革命的なシステムによって成り立っている。或いは、ビットコインだけでなく、今後のデジタル社会そのものの在り方を変えてしまう力すら持っているかもしれない。今回はそのちょっとだけ技術的な話を織り交ぜながら、ビットコイン・暗号通貨が一体どういうものなのか、どうやって作られているものなのか、そしてその展望はどうなるのか、今感じていることを述べていく。
ちなみに、最近にわかに流行っている「仮想通貨は儲かる!」系の記事ではない。あしからず。
*1:そして、多くの国でそれは幾度も崩壊している。