メテオフォール型開発

今日は、日本の代表的なソフトウェア開発手法について紹介しよう。

その名も、メテオフォール型開発である*1

 

第一節

通常のウォーターフォール型開発におけるプロジェクトはこのような形を取るが、

f:id:eiki_okuma:20180510174947j:plain

 

メテオフォール型開発ではこのような形が取られる。
f:id:eiki_okuma:20180510175057j:plain

 

そしてこうなる。
f:id:eiki_okuma:20180525121815j:plain

 

*1:命名、へっぽこ氏(@heppoko

続きを読む

クソゲーのゲームデザイン。#エイプリルフール #ポプテピピック

 はい、というわけで今年はクソゲーを作りました。もう半月経ってる……こわい。

 

ゲーム紹介

 f:id:eiki_okuma:20180416163629p:plain

 見ての通り、Fl●ppy bird である。クリックで上昇、何もしないと下降。土管の間を潜り抜けるとポイント追加。土管にあたると死ぬ。

 

制作判断

 アニメポプテピピックが予想以上にクソいい出来だったことを受けて、本編にあるゲーム風ドットアニメを本当にゲーム化してしまおうという一案。デザイナーである春さんが思いのほか乗り気だったので作ることに。このとき、エイプリルフールまで残り二日

 ネタの候補はいくつかあったが、結局一話のモノを採用することに、本編ではマ●オワールドのマントの挙動で上下するだけのポプ子が描かれていたが、ここに同じくマリ●っぽい土管を追加すれば Fl●ppy bird っぽいアレができるのでは? という短絡的な考えでゲームシステムの検討は終了。

 なんたって、必要な素材が少ない。ポプ子ループ入れて五枚、雲、土管、UIのみ(キノコとピピ美は後から追加)。一番の懸念点もとい技術的ボトルネックは「ブラウン管風表示」だったが、難なくクリアしたのでGOを出した*1。ブラウン管表示シェーダについては後ほど解説。

*1:ちなみに、これが上手くいかなかったら作らなかった。短期ネタだけに、こういう妥協は禁物

続きを読む

プロジェクトのフォルダ構成(ルート)

f:id:eiki_okuma:20180411121358p:plain

 三分で制作環境の紹介。ゲームプロジェクトのフォルダ構成はほんと人によってまちまちだが、自分は今のところこんな風に落ち着いている。これは Rabbit という名前のプロジェクトだ。

 ルートフォルダと同名である Rabbit フォルダは Unity のプロジェクトで、この直下にAssets だの Library だの Project Settings など色々入っている。これに関して特に語ることはないだろう。その次に重要なのが Work フォルダ。ゲーム本体には含まれない、いわゆるゲームリソースの原型が入っている。素材を切り出す前の画面構成の psd や、タイトルロゴなどの素材、資料、外注したリソースなど。

 あなたがイベントへの出展をもくろむなら、Press フォルダは今すぐにでも作ったほうがいいだろう。ゲームの詳細やスクリーンショット、タイトルロゴ、イラスト素材などを含んだプレスキットや、ポスター、チラシ、CDジャケット、ショップに提出するためのサムネイルやアイコンなど、完成系のアートワークが入っている。新しい需要が生まれるたびに中身は拡充されるが、既に作ってあったら簡単に渡すこともできる。そのつど Work フォルダを漁って提出するよりはずっと楽だ。

f:id:eiki_okuma:20180411122919p:plain

 Output フォルダの中身はその名の通り完成品=ビルドだ。これは魔法の女子高生の output フォルダの中身だが、プラットフォームによってフォルダ分けされ、その中で更にバージョン毎に分かれている*1。なぜか mp3 が入ってたり iOS フォルダが3つもあるのは何でかって? うるせえ

 最後、Sound フォルダはこれまたその名のとおり音ファイルが入っている。ぶっちゃけ、 Work フォルダの中に入れててもいいのだが、使用頻度が高いのでルートフォルダ直下に来てしまった。この中には効果音に使えそうな素材や、BGMやら、色々ごっちゃになっている。

 

 以上。こういうのを見せ合ったりすると結構面白いので、飲み会とか合宿で話題の種になったりするヨ。Assets フォルダの中身は次回。

 

 

*1:分かれてないこともある。めんどくさいし。

秒で Enum から Dictionary を作る

例えば string → Enum の逆引きハッシュテーブルを使いたい時などに使える奴。

Linq 使わない ver
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;
}
Linq 使う ver
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 テーブルが複数必要になったりするので、関数を汎用化して一行で書けるようにしておくと可読性が良くなる。

「ランクマッチ」に蔓延る4つの勘違いと最適解の考察

 f:id:eiki_okuma:20180303222127j:plain

 ランクマ。いまやどんな対戦ゲームにも実装されている、インターネットを介した対戦モードの一つである。その呼び名はゲームによってランクマッチ、ランキングバトル、レーティングバトル、ラダー、段位戦など多岐に渡るが、要は対戦の結果によって対戦相手とポイントを取り合い、モノによってはポイントに応じて段位階級が与えられるというゲームモードのことだ。総称が無い以上仕方ないので、この記事では一番メジャーな呼び名であるランクマッチを便宜上採用する。

 ランクマッチはどんな対戦ゲームにも当たり前のように実装される一方で、ゲーム開発者がこのシステムについて完全に理解しているとは言い難い。ランクマッチはヘビーユーザのために用意されたシステムで、その真価を理解するには同じゲームを数ヶ月間、何も知らない初心者から最上級者になるまで遊び続けなければならないからだ。日常的にゲームを遊ぶ開発者すら割合としては少ない昨今、一つのゲームをここまでやり込み、そのシステムを肌で理解している開発者はごく僅かに過ぎない。

 断言しよう。殆どのランクマッチはクソである。ランクマッチを実装している開発者がランクマッチのことを理解していないからだ。

 一方で、ようやくランクマッチにも主流と呼ばれる一つの解がいくつかのゲームで見られるようになってきた。この記事ではランクマッチを理解していない開発者がランクマッチを実装したときに起こりうる四つの勘違いと、生まれつつある最適解の一端を考察していく。

続きを読む

Coincheck 事件の概況と今後の展望

 f:id:eiki_okuma:20180127141657j:plain

 2018年1月26日、この記事を書いている時点で昨日だが、国内最大手クラスの取引所 Coincheck で史上最大規模のハッキング被害が発生した。

 現在もまだ調査中・検討中の事項が多く、今後の顛末がどうなるかは定かではないが、Twitter を見ていても情報が錯綜していたずらに仮想通貨界隈の不安が膨らむばかりなので、現時点での情報をここに纏めておく。また、今回の件に対する各所の対応は技術的にとても興味深いものがあり、一技術者としても情報を整理することに価値を感じている。

 なお、仮想通貨の基礎的な知識は過去記事を参照されたし。

続きを読む

やさしいビットコイン入門 - 暗号通貨の仕組みと展望

 f:id:eiki_okuma:20171204183553j:plain

 ットコインが盛り上がっている。

 さすがに、そろそろ一度も名前を聞いたことが無いという人は居ないだろう。ニュースになったり、億万長者が出たり、詐欺が起きたり、池上彰に解説されたり。国内大手である取引所の bitFlyer の CM も、ゴールデンタイムでよく見るようになってきた。

 しかし、多くの人たちにとって、ビットコインに対する認識は同じだろう。得体の知れないもの一体ビットコインとはなんだ? と。

 ビットコイン決済のようなものは最近増えてきたが、まだまだ多くの暗号通貨は使い道を持たないのが普通であり、その価値は直感的ではない。通貨といえば、古くは米や穀物、金貨に銀貨、宝石など、そのものの価値が担保されていることが一般的であり、国家というとてつもなく大きな規模の保証人がいて初めて硬貨や紙幣のようなものが存在しうるくらいのものだ*1。にもかかわらず、未だ取引においてはアフリカにおけるクレジットカード並の利便性しかないビットコインが、登り龍のように価格を上げ、やがて既存の通貨を超えるとまで言われている。これは一体どういうことだろうか。

 ビットコインの価値の源泉。それは、とあるシンプルかつ革命的なシステムによって成り立っている。或いは、ビットコインだけでなく、今後のデジタル社会そのものの在り方を変えてしまう力すら持っているかもしれない。今回はそのちょっとだけ技術的な話を織り交ぜながら、ビットコイン・暗号通貨が一体どういうものなのか、どうやって作られているものなのか、そしてその展望はどうなるのか、今感じていることを述べていく。

ちなみに、最近にわかに流行っている「仮想通貨は儲かる!」系の記事ではない。あしからず。

*1:そして、多くの国でそれは幾度も崩壊している。

続きを読む