What's This?

このブログは不定期に更新されるゲーム製作アラカルトのメモ帳です。
記事は以下のカテゴリーに分類されてます。(クリックで記事一覧表示)

全てのソースコードのライセンスについてはこちら

書いてる人→@eiki_okuma

ジャンル別・ゲーム作りの難易度

f:id:eiki_okuma:20170719112310j:plain

ゲームの種類と製作難易度 - 実践ゲーム製作メモ帳2

 ↑昔こんな記事書いたなあ……と日付を見てびっくり、六年前。

 六年前と今とでは大分制作環境の概況が変わったのと、経験値と技術力が高まったのと、ゲーム作りには色んな側面があるのでやっぱり一軸じゃ計りきれないなあ、と感じてのリメイク記事を書こうとおもう。上の記事はぶっちゃけ消したいくらいなのだが、そんなことをし始めると最新の記事以外全部消えてしまいかねないので残しておく。

ルール
・いずれも個人製作あるいは少人数でのチームを前提とする。
・制作環境は、最も有利なものを採用し、習得コストは問わない。
・評価項目はジャンルによって変わるが、基本的に星が増えるほど「難しい」。

2Dアクションゲーム

 

 取っ付きにくさ:★☆☆☆☆
 完成させる難しさ:★★☆☆☆
 素材の準備しにくさ:★★★☆☆
 高速化の大切さ:★★★★☆
 インターネット機能:★☆☆☆☆

  • 海外ではプラットフォーマーと呼ばれるジャンル。
    • 特に探索に重きを置いたものはメトロイドバニア等とも呼ばれる。
    • 最近は Takkoman のようにアクション性に重きを置いたものもトレンド。
    • あとは、人生オワタの大冒険 のように死にゲーに属するモノも。
  • ポピュラーなジャンルであり、制作するための資料が揃っているのでとっつきやすい。
  • Unity2D チュートリアル雛形が用意されているので、いまや当たり判定を自分で書く必要すらない。といっても、1から自分で作ってもそんなに難しくないし、勉強になる。
  • 一方で、素材作りは意外と難しい。特にメインキャラクターは、デザイナーがアニメーションを描かなければならない。背景は割と探せばあるのだが……。
  • 全ての処理を 1/60秒 に押し込める必要があるので、軽量化周りはかなりシビア。
  • インターネット機能はあまり求められない。
  • マリオから始まり、どの子ジャンルもすっかり世の中に溢れかえっているため、差別化には一ひねり必要である。一方で、取っ付きやすく分かりやすいので、インディーには古今東西人気のジャンルである。
続きを読む

日本語フォントのサブセット化用 常用漢字一覧

 おもしろ記事の次がいきなりこんなニッチな奴ですみません。

 ゲーム開発や Web 制作に日本語のフォントデータを使おうとすると、JIS第二水準までちゃんと漢字が入っているフォントは膨大なサイズになる。その殆どは日常会話に使わないモノなので、必要なモノだけを抜き出してスリム化、もとい専門用語で言うサブセット化を行い、フォントサイズを削減するのが通常である。

 ……が、その際に必要となる「常用漢字*1のリストがなんと見つからない。いや、厳密には政府サイトでも Wikipedia でもどこにでもあるのだが、ノイズが多く文字だけを抜き出している場所が見当たらなかった。ので一番マシなサイトから抜き出して整形したものを貼っておく。以下コピー推奨。お経ではない。

亜哀挨愛曖悪握圧扱宛嵐安案暗以衣位囲医依委威為畏胃尉異移萎偉椅彙意違維慰遺緯域育一壱逸茨芋引印因咽姻員院淫陰飲隠韻右宇羽雨唄鬱畝浦運雲永泳英映栄営詠影鋭衛易疫益液駅悦越謁閲円延沿炎怨宴媛援園煙猿遠鉛塩演縁艶汚王凹央応往押旺欧殴桜翁奥横岡屋億憶臆虞乙俺卸音恩温穏下化火加可仮何花佳価果河苛科架夏家荷華菓貨渦過嫁暇禍靴寡歌箇稼課蚊牙瓦我画芽賀雅餓介回灰会快戒改怪拐悔海界皆械絵開階塊楷解潰壊懐諧貝外劾害崖涯街慨蓋該概骸垣柿各角拡革格核殻郭覚較隔閣確獲嚇穫学岳楽額顎掛潟括活喝渇割葛滑褐轄且株釜鎌刈干刊甘汗缶完肝官冠巻看陥乾勘患貫寒喚堪換敢棺款間閑勧寛幹感漢慣管関歓監緩憾還館環簡観韓艦鑑丸含岸岩玩眼頑顔願企伎危机気岐希忌汽奇祈季紀軌既記起飢鬼帰基寄規亀喜幾揮期棋貴棄毀旗器畿輝機騎技宜偽欺義疑儀戯擬犠議菊吉喫詰却客脚逆虐九久及弓丘旧休吸朽臼求究泣急級糾宮救球給嗅窮牛去巨居拒拠挙虚許距魚御漁凶共叫狂京享供協況峡挟狭恐恭胸脅強教郷境橋矯鏡競響驚仰暁業凝曲局極玉巾斤均近金菌勤琴筋僅禁緊錦謹襟吟銀区句苦駆具惧愚空偶遇隅串屈掘窟熊繰君訓勲薫軍郡群兄刑形系径茎係型契計恵啓掲渓経蛍敬景軽傾携継詣慶憬稽憩警鶏芸迎鯨隙劇撃激桁欠穴血決結傑潔月犬件見券肩建研県倹兼剣拳軒健険圏堅検嫌献絹遣権憲賢謙鍵繭顕験懸元幻玄言弦限原現舷減源厳己戸古呼固股虎孤弧故枯個庫湖雇誇鼓錮顧五互午呉後娯悟碁語誤護口工公勾孔功巧広甲交光向后好江考行坑孝抗攻更効幸拘肯侯厚恒洪皇紅荒郊香候校耕航貢降高康控梗黄喉慌港硬絞項溝鉱構綱酵稿興衡鋼講購乞号合拷剛傲豪克告谷刻国黒穀酷獄骨駒込頃今困昆恨根婚混痕紺魂墾懇左佐沙査砂唆差詐鎖座挫才再災妻采砕宰栽彩採済祭斎細菜最裁債催塞歳載際埼在材剤財罪崎作削昨柵索策酢搾錯咲冊札刷刹拶殺察撮擦雑皿三山参桟蚕惨産傘散算酸賛残斬暫士子支止氏仕史司四市矢旨死糸至伺志私使刺始姉枝祉肢姿思指施師恣紙脂視紫詞歯嗣試詩資飼誌雌摯賜諮示字寺次耳自似児事侍治持時滋慈辞磁餌璽鹿式識軸七叱失室疾執湿嫉漆質実芝写社車舎者射捨赦斜煮遮謝邪蛇尺借酌釈爵若弱寂手主守朱取狩首殊珠酒腫種趣寿受呪授需儒樹収囚州舟秀周宗拾秋臭修袖終羞習週就衆集愁酬醜蹴襲十汁充住柔重従渋銃獣縦叔祝宿淑粛縮塾熟出述術俊春瞬旬巡盾准殉純循順準潤遵処初所書庶暑署緒諸女如助序叙徐除小升少召匠床抄肖尚招承昇松沼昭宵将消症祥称笑唱商渉章紹訟勝掌晶焼焦硝粧詔証象傷奨照詳彰障憧衝賞償礁鐘上丈冗条状乗城浄剰常情場畳蒸縄壌嬢錠譲醸色拭食植殖飾触嘱織職辱尻心申伸臣芯身辛侵信津神唇娠振浸真針深紳進森診寝慎新審震薪親人刃仁尽迅甚陣尋腎須図水吹垂炊帥粋衰推酔遂睡穂随髄枢崇数据杉裾寸瀬是井世正生成西声制姓征性青斉政星牲省凄逝清盛婿晴勢聖誠精製誓静請整醒税夕斥石赤昔析席脊隻惜戚責跡積績籍切折拙窃接設雪摂節説舌絶千川仙占先宣専泉浅洗染扇栓旋船戦煎羨腺詮践箋銭潜線遷選薦繊鮮全前善然禅漸膳繕狙阻祖租素措粗組疎訴塑遡礎双壮早争走奏相荘草送倉捜挿桑巣掃曹曽爽窓創喪痩葬装僧想層総遭槽踪操燥霜騒藻造像増憎蔵贈臓即束足促則息捉速側測俗族属賊続卒率存村孫尊損遜他多汰打妥唾堕惰駄太対体耐待怠胎退帯泰堆袋逮替貸隊滞態戴大代台第題滝宅択沢卓拓託濯諾濁但達脱奪棚誰丹旦担単炭胆探淡短嘆端綻誕鍛団男段断弾暖談壇地池知値恥致遅痴稚置緻竹畜逐蓄築秩窒茶着嫡中仲虫沖宙忠抽注昼柱衷酎鋳駐著貯丁弔庁兆町長挑帳張彫眺釣頂鳥朝貼超腸跳徴嘲潮澄調聴懲直勅捗沈珍朕陳賃鎮追椎墜通痛塚漬坪爪鶴低呈廷弟定底抵邸亭貞帝訂庭逓停偵堤提程艇締諦泥的笛摘滴適敵溺迭哲鉄徹撤天典店点展添転填田伝殿電斗吐妬徒途都渡塗賭土奴努度怒刀冬灯当投豆東到逃倒凍唐島桃討透党悼盗陶塔搭棟湯痘登答等筒統稲踏糖頭謄藤闘騰同洞胴動堂童道働銅導瞳峠匿特得督徳篤毒独読栃凸突届屯豚頓貪鈍曇丼那奈内梨謎鍋南軟難二尼弐匂肉虹日入乳尿任妊忍認寧熱年念捻粘燃悩納能脳農濃把波派破覇馬婆罵拝杯背肺俳配排敗廃輩売倍梅培陪媒買賠白伯拍泊迫剥舶博薄麦漠縛爆箱箸畑肌八鉢発髪伐抜罰閥反半氾犯帆汎伴判坂阪板版班畔般販斑飯搬煩頒範繁藩晩番蛮盤比皮妃否批彼披肥非卑飛疲秘被悲扉費碑罷避尾眉美備微鼻膝肘匹必泌筆姫百氷表俵票評漂標苗秒病描猫品浜貧賓頻敏瓶不夫父付布扶府怖阜附訃負赴浮婦符富普腐敷膚賦譜侮武部舞封風伏服副幅復福腹複覆払沸仏物粉紛雰噴墳憤奮分文聞丙平兵併並柄陛閉塀幣弊蔽餅米壁璧癖別蔑片辺返変偏遍編弁便勉歩保哺捕補舗母募墓慕暮簿方包芳邦奉宝抱放法泡胞俸倣峰砲崩訪報蜂豊飽褒縫亡乏忙坊妨忘防房肪某冒剖紡望傍帽棒貿貌暴膨謀頬北木朴牧睦僕墨撲没勃堀本奔翻凡盆麻摩磨魔毎妹枚昧埋幕膜枕又末抹万満慢漫未味魅岬密蜜脈妙民眠矛務無夢霧娘名命明迷冥盟銘鳴滅免面綿麺茂模毛妄盲耗猛網目黙門紋問冶夜野弥厄役約訳薬躍闇由油喩愉諭輸癒唯友有勇幽悠郵湧猶裕遊雄誘憂融優与予余誉預幼用羊妖洋要容庸揚揺葉陽溶腰様瘍踊窯養擁謡曜抑沃浴欲翌翼拉裸羅来雷頼絡落酪辣乱卵覧濫藍欄吏利里理痢裏履璃離陸立律慄略柳流留竜粒隆硫侶旅虜慮了両良料涼猟陵量僚領寮療瞭糧力緑林厘倫輪隣臨瑠涙累塁類令礼冷励戻例鈴零霊隷齢麗暦歴列劣烈裂恋連廉練錬呂炉賂路露老労弄郎朗浪廊楼漏籠六録麓論和話賄脇惑枠湾腕  、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+-±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§※〒→←↑↓♪◯0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ─━!"#$`"'①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳≒0@P`p!1AQaq"2BRbr#3CScs$4DTdt%5EUeu&6FVfv'7GWgw(8HXhx)9IYiy*:JZjz+;K[k{,<L\l|-=M]m}.>N^n~/?O_o

 上のリストでは漢字に加えてひらがなや頻出記号も含まれているが、通常のシステムメッセージや NPC 会話などを想定しているので、記号やキリル文字は除外している。必要であれば適宜足すべし。

 ちなみにサブセット化のやり方については、 Unity で TextMeshPro を使うなら機能の中に入っているし、そうでなければサブセットフォントメーカーというものを使うべし。優秀。

 

*1:非JIS第一水準。JIS第一水準も日常会話に使わない漢字が多く、常用漢字より800字ほど多い

メテオフォール型開発

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

その名も、メテオフォール型開発である*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:分かれてないこともある。めんどくさいし。

C# で Enum から Dictionary を作る方法。

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

Linq 使わない ver
static public Dictionary< string, EnumType > CreateEnumDictionary<EnumType>()
{
	Dictionary< string, EnumType > 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 );
}
使い方
Dictionary<string, CharacterID> 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を挟んだほうが安心
	CharacterID new_chara = charaid_table[new_chara_name];						// 効率のよい逆引き
	AddChara( new_chara );
}

実際 csv からデータを引っ張るときは string-Enum テーブルが複数必要になったりするので、関数を汎用化して一行で書けるようにしておくと可読性が良くなる。