Unityゲームをモバイルリリースする道のり。何に時間がかかったか
こんにちは!丸ダイスです。
先日、Unityで開発したゲームのモバイル版をリリースしました。
https://twitter.com/dice_maru/status/1253657786283520001
前に出した時に苦労した覚えがあって、PCで遊べる完成したゲームでもモバイル版を出すのはとにかく大変というイメージがあります。
…みんなあるよね?あってほしい。
なので、「結局、何にどれだけ時間がかかったか?」をまとめておこうという記事です。
「このゲームをモバイルで出そうかな?」と思った時、やるかどうか、何を削るかの判断にきっと役に立つはず!
※ 実は、正確に言うとiOS版がリリース出来ていません。Appleの審査が通らないからです(というか審査してくれない…)。が、ビルドや公開準備など開発側としてやることは終わってるので、かかる時間の比較の上では不問ということにしています。
- 画面の再設計して、バーチャルパッドで遊べるようにした(14時間)
- 外国語への翻訳(7時間)
- プライバシーポリシー表示の組み込み(3.5時間)
- 広告をゲーム遷移に組み込む(4時間)
- Androidで実機ビルドする(6.5時間)
- 広報用のトレーラー動画 (7時間)
- Android実機で広告が出ない…(12時間)
- アプリ内課金 (0時間。中止)
- Androidのストア登録(3.5時間)
- 広告メディエーションの導入(5時間)
- Free Aspectに対応(1時間)
- AppStoreへのアプリ登録(3.5時間)
- 事前予約・プレスリリースの準備と発信(5時間)
- iOS実機でビルド・実行する(10時間)
- iOSが審査してもらえない……(10時間)
- まとめ
画面の再設計して、バーチャルパッドで遊べるようにした(14時間)
結構悩むことに。
元のゲームは1画面1ステージなので、広告やバーチャルパッドを置く「隠れてもいい場所」がない。
なので、元のゲーム画面を縮小する↑こんなのを作りかけたけど、メットボーイを参考にゲーム画面を分割した操作しやすい方法をひらめいて…
こうなった。
https://assetstore.unity.com/packages/tools/input-management/joystick-pack-107631?locale=ja-JP:titleを使うのは初めてだったが、やりたいことはシンプルだったので半日でほぼ動くように。
このバーチャルパッド設定が必要だったので、ついでに「設定」「クレジット」「課金」など、オリジナル版にない追加UIは画面レイアウトだけ作った。(設定画面は過去作から使いまわし) TMProでのSprite Assetを勉強。元はキー操作(R)だったHowToを絵文字でやるように差し替えて終了。
外国語への翻訳(7時間)
いい機会なので、GoogleSpreadSheetのテキストを一発でcsvにして取り込めるようにワークフローを整備しました。
Google翻訳最高!!知らない言語もとりあえず翻訳は出来ます。
今までせいぜい 日本語、英語、中国語 までだったのが、それら含めて(一応)9言語が選べるように!
ひたすらプロジェクト中にKEYを入れて、日本語をSpreadsheetに移す作業(つらい・・)。
まとめて翻訳出来るとはいっても
「おす」が「男性」に…。ちがうんや…。
こういう誤翻訳は起こるので、気付いたら直しました。
英語は流石に一通り誤訳がないか読みました。
他は明らかにおかしい中国語に気付くくらいでほぼ読めないのでそのまま。
なんとなく、自動翻訳は
- 日本語→(中国語、韓国語)
- 英語→(ヨーロッパ系言語)
としてみたけど、効果があったかは不明。
文字溢れ
和「かいだんづくり( ◜◡◝ )」→ 独「Treppen Herstellung💢」
ドイツ語は・・ドイツ語はな・・・・。
Text Mesh Pro のAuto Sizingを使って文字が縮むようにしました。
1言語しか表示されないとUI上でのRect設定が適当だったりするので、文字が出る要素は一通りチェックする必要があった。
セリフの翻訳
口語なので自動翻訳が難しい。翻訳がダメだった時の萎え度も高いので、本当はネイティブに頼みたいところ。
今話題のDeepL翻訳を試してみました。
あれ?結構いい感じじゃね?知らんけど。 Heh hehがカワイイです。
ちなみに、Google翻訳はこちら
SpreadSheetと違って手動で翻訳しないとダメだけど、デモ1つごとにコピペ1回で済みそうだったのでDeepLで。
面倒なので、英語以外は英語からのGoogle翻訳で済ませる。
セリフの多いゲームではないけど、DeepL翻訳の英文は都度チェックして訳しやすいように日本語を調整したので、数時間はかかった。
翻訳終わり!Heh heh!
プライバシーポリシー表示の組み込み(3.5時間)
こういうヤツ。うっとうしいですよね。実装する方も面倒くさい思っています…。
でも、こうして各アプリが同意を取るおかげで、GoogleさんやAppleさんの利用規約がゆるくなってる・・・はず。
初回のみの言語切替も作りかけたけど、自動判定出来そうだったのでボツに。
広告をゲーム遷移に組み込む(4時間)
AdMobSDKの組み込み
GoogleMobileAdsSDKの最新版unityパッケージをGitHubからもらってくる。 何度かやってるのでほぼ秒。実機でちゃんと出るかはともかく…。
バナー広告の検討
AdMobのサポートページとかを見てうまくやると、Editor上でもバナー広告のサイズ感を再現可能。
それでダミー広告で画面を隠してみて…
諦めました。
パズルゆえ考えてる時間が長いので出したかったが、流石にプレイ体験を損ないすぎる… 遅れてくる企画の敗北です…
全画面広告
シンプルに、パズルをクリアして次のパズルが始まる直前に全画面広告。画面に広告タイマーを表示。
遊ぶ側の広告への憎しみを忘れないために、Editor上でも出来るだけダサいデザインでダミー広告が出るように。
この、このクソ広告め・・・。消えろ!消えろ!!!
Androidで実機ビルドする(6.5時間)
一旦広告だけある状態で実機確認。
他のも組み込んだ後にダメだと、どこまでなら動くか切り分けるのが大変に…。
一度ビルドを走らせると平気で30分とか待たされて、Android用コマンドライン部分(結構最後の方)で失敗…、少し変えてもう一度、また30分…。
NDKがどうだの.jarがgradleでdeprecatedだのがConsoleに吐かれるも、中間処理がいっぱい挟まってるので何が原因か全く分からない。
あぁこれ…最高にモバイル版ビルド作業…って感じ
素直にAndroid ビルドはExport Projectに変えて、Android Studioを使って自分でapkをビルドします。
意味不明なエラーを気合で直して、ようやくデバッグ版の.apkが出来ました。たった2時間半で済んでよかった その後KeyStore準備とか何やかんやあってrelease版が出来た。
ようやく実機で遊べる状態になるも、広告が表示されない…。
とりあえず放置しました。
広報用のトレーラー動画 (7時間)
気が重かったけど、ストアページやGoogle 広告などいろいろ便利なので、作らざるを得ない。
今までトレーラーは同人ゲームまとめ動画向けに 1~3分くらいの尺で作ってたのですが(https://www.youtube.com/watch?v=P2CYM9GtNFE、https://www.youtube.com/watch?v=7ie43FNA5JA )
ストア向けの動画はApp Storeの30秒が一番短い制限です。今回はこのショートPV一本に絞ってサッと作りました。
出来た。 30秒だと必然的に「本題!ドヤドヤ!終わり!」みたいな構成になるけど、その方が要点がまとまった良いPVなのでは…という気もしますね。
日本語版もついでに作って終了。
Android実機で広告が出ない…(12時間)
時間が経てば動くやろ と思っていたけど、待てど暮らせど広告が表示される気配はなし。
PlayServiceResolverって何だ。イチから勉強するか。aarって誰だ。Androidのシミュレーターなら出るのか。ええいNCMBは一回外すぞ。っていうか意味が分からないログが多すぎてどれがクリティカルなのか全然分からない…。
最終的に、未公開アプリのデバッグビルドなのに本番広告が出るリクエストになってしまっていた…? ようで、テスト広告はなんとか実機で見られました。
が、言ってることが分からないログと警告は特に消えず……。
つらさの主な原因は、UnityからAndroid Studioなどの実機用エディタに移ると全てがブラックボックス化されることでしょうか…。
アプリ内課金 (0時間。中止)
これ以上ネイティブプラグインで苦しむのが嫌だったので中止しました。
(ゲーム内コンテンツに比べ圧倒的に買われない広告削除くらいしか課金要素はないし)
Androidのストア登録(3.5時間)
気合で登録しました。空いてる空欄をひらすら埋める作業…。
広報用のテキストは他のプラットフォームとかでプレスリリースで便利なのでテキストとして保存します。
広告メディエーションの導入(5時間)
AdMob広告を使う際、いろんな業者から競売されるようにすると不思議な力で単価が上がるらしいのでチャレンジしてみました。知らんけど。
Google AdMob のメディエーションガイド を読んで各メディエーションを組み込みます。
AdMob単体の広告に苦労したのに比べると、思ったより組み込みは楽でした。Googleのドキュメントがとても分かりやすいのも良いです。
AppLovin(実装難易度 3)
新しく広告を作るために、一度メディエーションなしでSDKを組み込まないといけない。逆にメディエーションを使うと直接呼び出しが出来なくなる(両方を含めてビルド出来ないため)。
ドキュメントが分かりにくい。テストビルドにいきなり本番っぽい広告が出る。
全体的に作りがモッサリしてるが、コンソールの項目の少なさも含めて庶民派な感じでちょっと可愛い。
UnityAds(実装難易度 1)
Cloudビルドとかとダッシュボードが統合されてて、Unityチョットデキルとハードルが低い。ランタイム実装も何も要らないので大変楽。
Facebook Audience(実装難易度 4)
広告以外にも機能が膨大にあるようで、ブラウザコンソールがめちゃくちゃ複雑。
2つのコンソールをまたいでIDをたくさん作らされてそれぞれを正しく接続しないといけない。AdMobのドキュメントがないと絶対無理。
もちろん当然のようにFacebookのアカウントと関連付けられる(イヤだ…)
ランタイム実装は何も要らないのは楽だが、広告テストに必要なAdvertising Identifierのために結局実機実装が少し必要。
IronSource(実装難易度 2?)
アプリを公開してないとうまく出来ない雰囲気で諦めた。
公開さえしてればなんか簡単そうな雰囲気だった。
Free Aspectに対応(1時間)
カメラの描画範囲はタテにもヨコにも伸ばせなかったので、いわゆる黒帯でお茶を濁しました。さみしいけど致し方なし。
2:1
4:3
AppStoreへのアプリ登録(3.5時間)
基本的には Google Playのコピペなんですが、スクリーンショットや動画の解像度指定が厳しく、さらに複数要求されます。 Photoshopのバッチ処理やAfterEffectsの出力をいじって、スクリーンショット11枚(英語8枚+日本語3枚)と動画2本(英語・日本語)を3つの解像度に分裂させて、33枚のスクリーンショットと6本の動画を生成。
(正直、アス比対応を黒帯にしたのはそうしないと各解像度のスクリーンショットを作るのが面倒になるというのも・・)
事前予約・プレスリリースの準備と発信(5時間)
この当たりから想像以上の長期化でしんどくなってメモが適当ですが、時間は正確です。
予約トップ10
予約トップ10でアプリの事前予約を登録して
PR TIMES
PR TIMESでプレスリリースを出す準備をしました。
内容はストア広報の内容と大きく変わりませんが、各サイトのフォーマットに合わせます。
リリース時のオペレーション
実際にリリースしたら、下書き準備したプレスリリースを発射して、予約トップ10のリリースしたぞいボタンを押します。
iOS実機でビルド・実行する(10時間)
(ちなみに、古かったMacのOSを最新に上げるのに5時間くらいかかりましたが、それは入れてません)
Certificate全く分からない
iOSのビルドはCertificate, mobile provision というアプリの証明書のような仕組みを組み込まないとダメです。
調査と組み込みに結構時間がかかった…。
iOS版の広告準備
AdMob広告や各メディエーションの登録と実機確認をiOSで改めてやりました。 2回目なので前よりはマシです。
iOSが審査してもらえない……(10時間)
詳細は伏せますが謎のリジェクトをくらってしまい、そもそもアプリを審査してもらえてないです。
既存のアプリをアップデートしてみたり、1週間ほどいろいろ試しましたが、諦めました。
ぶっちゃけて言うと、今後も含めてiOS版が出るかはApple様次第です。 正直そこそこ不愉快なのですが、どうにも出来ません…。
まとめ
iOSは一旦保留ということにしましたが、4/24金曜日になんとかリリース出来ました
この記事の目的がモバイル版対応の作業コストを正しく見積もりことなので、各項目をカテゴリに分類してみました。
カテゴリ | かかった時間 |
---|---|
モバイル版仕様の実装 | 22.5 |
広報素材の作成 | 8 |
多言語対応 | 7 |
アプリストア | 6 |
広告SDKを組み込む | 10 |
想定外の問題対処 | 27 |
実機ビルド | 11.5 |
広報作業 | 5 |
実機ビルドも広い意味では問題対処ですが、モバイルリリースではほぼ必ずぶつかる壁なので別にしました。
合わせると半分近く、約40時間近くを問題対処に使っていました。実機ビルドに慣れてきたり問題が起こらなければこれらはほぼゼロになるはず。
一方、モバイル版仕様や素材作成、翻訳、広報などは制作作業なので、リリース経験が増えてもあまり減らない作業コストです。
評価
お気づきかと思いますが、3月末から期間にして約1ヶ月、オリジナルゲームの開発よりもはるかに時間がかかりました。
集計する前は、「1作品20時間くらいでモバイル対応して、ゲームジャムに参加する度にリリース!」と出来たらいいなと思っていたのですが、現実的には慣れたとしても40時間、2週間くらいはかかりそうな印象です。
ゲームジャム作品で言えば、3割をモバイルリリースに進めるくらいがコスト対効果として適切かなぁ…。
【さかだちの街】モバイル版をリリースしました!
こんにちは!丸ダイスです!
以前の #unity1week で作った「さかだちの街」のモバイル版をリリースしました!
Android: https://play.google.com/store/apps/details?id=com.marudice.sakadachi iOS(申請中:予約受付中): さかだちの街の配信日と事前登録 | 予約トップ10
広報用にいろいろ便利なのでPVも自分で作っちゃいました!
コミケにゲーム出す時の動画で慣れてきたのか、 一撃で推しが伝わる内容が割と短時間で作れて満足です!
よかったら遊んでみて下さい!
古いMacBook AirのOSをSierraからMojave経由でCatalinaに上げる
- UnityアプリのiOS版を出そうにも、iOSビルド用MacのOSが古すぎて最近のUnity+iOSビルドのワークフローが使えなさそうなので、出来るだけ新しいバージョンに上げることに。
- 普段はWindowsでUnity開発してます
環境
- MacBook Air Mid 2013 モデル
- OS Sierra 10.12 系
まずMojave(10.14系に上げた)
最新はCatalina(10.15系)だった。AppleのOSアップグレードサポートを見ると、SierraからはApp Storeで上げられるとのことだったのでやってみる。
この画面。本来はこの画像のように「ダウンロード」を押すと下に残り時間が出るはずが、ダウンロードを押しても下のバーがそもそも出ない。
App Storeのトラブル対応の記事を見て Wifiの確認、DNSを8.8.8.8、再サインイン など試して見るも、効果なし。
App Storeで macOS Mojave(10.14系. ほぼ最新) のダウンロードを試してみたら、こちらは問題なくすんなり成功。AppleのOSアップグレードサポート によるとMojaveからだとCatalinaは上げやすいらしい。
次にCatalina(10.15系)に上げた
Mojave→Catalina へのアップデートは システム環境設定→ソフトウェアアップデートで上げられるそうなのでやってみる。
「今すぐアップグレード」を押すと、8GB程度のダウンロードが始まる。
これはいけそうだと思うも、プログレスバーが一杯になってもアップグレードが始まるわけでもなく、「今すぐアップグレード」がまた押せる状態に戻っている。
押すと平然とダウンロードが再スタート。え、アップグレードしてよ…
よく見ると、アップグレード先のOSバージョンの代わりに「(null)」と表示されている。なんか挙動が怪しい・・・。
調べると、同じ問題を踏んでいる海外のフォーラムを発見 。
こうなるらしい(上のリンクから転載)。表示も症状もほぼ同じ。さぁどうしたら治るの?
「Apple Beta Software Programme に入ってると起こるから一旦抜けた方がいいよ!」とのこと。が、私のMacでは左の「Apple Beta~」の表示はなし。入ってない模様。詰んだ…。
ここでふと、App Storeで macOS Catalina のページを開いてみる。
「入手」を押すが、先程の「ソフトウェアアップデート」が開くだけ。それじゃダメなんだよ~。と思っていたのですが…
なぜか正常にCatalinaのインストール画面が開きました。
「ソフトウェアアップデート」でOSのデータダウンロード後に開くはずだった画面遷移が、App Store経由だとなぜか開いた?理由は分かりません。
結局これらをやったことになります。
- 「ソフトウェアアップデート」から普通にアップグレードしようとする(途中で止まる)
- App Store経由で再度アップグレード
この後は画面に従ってボタンを押したり待ったりして、無事アップグレード出来ました。他事やりながらだけど、2,3日かかってしまいました。
1週間で1時間規模のパズルアクションがなぜ作れたか
丸ダイスです!
unity1weekというオンラインのゲームジャムイベントで「さかだちの街」というゲームを3人チームで制作しました。
さかだちの街 | フリーゲーム投稿サイト unityroom
unity1weekにはこれまでも何度か参加していたのですが、今回総合ランキング1位という栄誉を頂くことが出来ました。
Twitterでもゲーム紹介ページでも多くのコメントを頂きましたが、
- 完成度
- クォリティ
- (ステージ数など)ボリューム
といったものが多く、総合的に「1週間という期間に対して、作られたものの量と質が高い」と感じて頂けたようです。…なので
1時間 | プレイヤー挙動の実装 |
こんな感じで「誰が・どれだけ・何に」時間を使ったのかが分かるように書いてみようと思います。
※正確な記録ではなく、チャットログ・コミットログ・記憶からの概算です。また、あくまで丸ダイス目線なので、ほかの2人のものは知らなかったり精度が落ちます。
※フチヌローさんも振り返り記事を書いてくれました!こちらではあまり触れないアニメ作りについて詳しく書かれてます!
登場人物は、開発に参加したこの3人です。
アイコン | 名前 | 主な担当 | |
---|---|---|---|
丸ダイス | ディレクション・プログラム・UnityEditorを使うこと全て | @dice_maru | |
フチヌロー | アートデザイン・キャラクタードット・背景グラフィック | @futinuro | |
Puzzler.K | レベルデザインの全て | @k_puzzler |
目次
- 目次
- -6日目 2人での共同開発を決定
- -5日目 ボイチャでのチームメイクMTG
- -2日目 開発環境の準備。『企画』と『アイデア』のフォーマットを共有
- 0日目深夜 各自で「アイデア」と「企画」を出した
- 1日目 企画決定!Puzzler.K参戦!仕様を固めて制作開始
- 2日目 アニメ出来始め。目標ステージ数追加。地獄のブロック実装
- 3日目 マップチップは素材利用に決定。ステージ遷移と量産の準備完了。
- 4日目 パズルの並びを本格的に考え始める。必須アクションは実装完了。
- 5日目 怒涛のワールド配置とあふれ出るバグ
- 6日目 全アニメ完遂! 全配置完了! デバッグしながら演出強化
- 7日目 背景滑り込み完成!いろいろねじ込んで間に合…ってないけど完成!
- 振り返って
- で結局、「1週間で1時間規模のパズルアクションがなぜ作れたか」?
- 8日目~(?)
-6日目 2人での共同開発を決定
1時間 | 共同開発の交渉 |
unity1week に限らず、画作りが出来る人と組みたいなぁ…と思っていた丸ダイスは
お会いした時に「絵は描けるけど、プログラムが難しくて…」と話していたフチヌローさんにDMを送ります。 快諾を頂いて一安心。2人開発が決定しました。
立て続けにクソ長DMを送り、
- コミュニケーション手段:Discord
- 開発環境:UnityのVersion統一
- プロジェクトの共有手段:Google Drive
を決めました。
ついでに、丸ダイス以外はunity1week経験が多くなかったので、知ってもらった方が動きやすかろうと思いスケジュール感を共有しました。
-5日目 ボイチャでのチームメイクMTG
1時間 | ボイチャで打ち合わせ |
お互い知らないことが多すぎたので、まずはDiscordのボイスチャットで打ち合わせをしました。
どんなスキルがあるか? 何を作りたいか? ゲームジャムに参加するモチベーションはなにか?
といったことを聞いたり話したりして、
- フチヌローさんは絵作りに専念
- 丸ダイスはそれ以外
- 企画は二人で考える
- たぶんドット絵の2Dゲーム
- ドット背景を活かせると強い。ドットアニメも多分いける。
と、作業分担が決まって企画を考える方針が立ちました。
また、お題発表の24日(月・祝)にお互い企画を持ち寄ってリアルで打ち合わせ ということも決めて解散。
-2日目 開発環境の準備。『企画』と『アイデア』のフォーマットを共有
3時間 | Google Driveの事前準備 | |
1時間 | Githubリポジトリ、プロジェクト準備 | |
2時間 | 『企画』と『アイデア』のフォーマットを共有 |
開発の準備
Githubは私しか使ったことないようなので即諦めました。ぶっつけで使うにはGitはあまりにも難しい。
Google Driveの自動共有について調べて、「素材共有用」「プロジェクト共有用」の2つのフォルダを作って終了。
Unityのキャッシュファイルが大量に共有されてしまうのが懸念でしたが、なんとかなるやろと思ってました(なりませんでした。地獄を見ます)。
自分で使うリポジトリや最小プロジェクトのセットアップはいつも通りなので苦もなく完了。
持ち寄る『企画』と『アイデア』のフォーマットを決めた
『企画』は、こちらのフォーマットをそのまま使うことにしました。
ゲームジャムで役立つ超速ゲーム企画 – Unity Learning Materials
(私はこれを、去年7月のゲームジャムで たアケイクさんとryosukeさんがRECを共同開発された時のレポートで知って感銘を受けました。 ゲームジャムとチーム開発がイメージしやすい筆致で書かれていて、必読です。 たアケイクさんの企画のノウハウ、もっと知りたい。)
この『企画』のフォーマットは、形式に従おうとすると自ずと何をするゲームなのかが明確な企画になる点で非常に優れているのですが、その分書く難易度は高いです。
より良いゲームジャムを経験してもらうために、受け身でなく企画に参加出来るようにしたかったです。
なので、ネタを出すハードルを下げるため、面白そうなキーワードを書いた『アイデア』だけでも出来るだけ持ってきて下さい!と伝えました。
0日目深夜 各自で「アイデア」と「企画」を出した
3時間 | 企画・アイデア出し | |
?時間 | 企画・アイデア出し |
お題発表後の深夜1時。まず『アイデア』を思いつく限り出しました。最終的にはこんな感じに。
予想以上に難しく、「逆」っていじわるなお題だな…と思ったのをよく覚えています。
一人でやってますが、いわゆるブレストです。 思いついたキーワードを片っ端から書いては貼ります。
カテゴリに分類出来ることには途中で気付き、シチュエーションありきで一発ネタで終わりそうな「立場が逆転」系よりも
動きや見た目に結びついている「ひっくり返す」系の方が筋が良さそうだと悩んでいたのですが……
企画1.「Shooting Me(Second Person Shooting)」
企画2.「逆立ちのアリス」
- テーマと表現
- 不思議の国のアリス(変なことが起きても納得感がある)
- プレイヤーの行動
- 逆立ちすると自分以外の重力が反転。スイッチを押すと世界が反転して、逆立ちはぶら下がりになる。
- メカニクス
- 2Dパズルアクション
最終的には「いけそう」な企画として思いついたのはこの2つでした。
まずシューターの方を思いつき、そこそこ「いけそう」でしたが、ドット絵とは相性最悪だったので抑えの企画としました。
本題はもう一方。ポストイットに「逆立ち」と書いた時は、内心「…で?」とセルフツッコミを入れたゴミアイデアでしたが、絵が「ぶら下がってる」ように見えた瞬間に脳に電撃が走りました。
後の思考プロセスは(逆立ちで世界をひっくり返すとぶら下がり。これだと逆立ちに意味がないから周りが「自分の下」に落ちる。 おまけで逆立ち時の性能差。 一貫性があって少し変な挙動のルール=新しいパズルゲームが作れる。 逆立ちで走り回るゲームはほぼ見たことないしインパクトもよし)と、「逆立ちを反転=ぶら下がり」を起点に企画が固まりました。
私はメカニクスや行動から考えるタイプなので、どちらもテーマと表現は後付けです。このフォーマットをちゃんと書くのは初めてでしたが、確かにそこまで考えている方が企画に説得力がありそう。
企画出来ますオーラを出した手前もう1つ出したかったですが、思いつかなかったのとAM4時を回っていたので仕方なく終了……。
1日目 企画決定!Puzzler.K参戦!仕様を固めて制作開始
2時間 | 企画MTG | |
1時間 | グラフィックのタスクと仕様MTG | |
1時間 | パズルの仮仕様MTG | |
?時間 | パズルの作問開始(+6問) | |
?時間 | アートデザイン | |
1時間 | プレイヤーデザイン相談 | |
6時間 | プレイヤー基本挙動の実装 |
時は2/24 月・祝 振り返れば長い一日の始まりです…。
9:30 企画MTG
都内の喫茶店。フチヌローさんと直接あっての企画会議。早朝のおかげでノートやiPadを広げて話しやすかったです。
私は企画2つとアイデアノート。フチヌローさんは企画はなし、iPadにアイデアをたくさん書いてきてくれました。
フチヌローさんも「鮭の遡上」「逆脱出ゲーム」「北風と太陽」「聖剣を抜かない」といった企画に近かったり面白くなりそうなアイデアがありましたが、話し合った結果『逆立ちのアリス』に決定。
ただしデザインについては一度考えてみたいとのことで宿題になりました。
12:00 グラフィックのタスクと仕様MTG
そのままグラフィックタスクと仕様を決めました。
プレイヤードットは、「立ち・走り・逆立ち・逆立ち走り・ジャンプ」など必須なものから、「箱押し・逆立ち開遷移・逆立ちジャンプ・ゴールダンス」 などゲーム仕様や余力次第なものがあると伝えてリストアップ。
プレイヤードットはどうしても最優先だけど、ギミック・背景・エフェクトも余力があればやろうというところまで決定。 得意なドット背景を遊びに活かせないのを申し訳なく思いつつ…。
14:00 パズルの仮仕様MTG
午後1時。『逆立ちのアリス』はPuzzler.Kさんなら素晴らしいパズルを作れるゲームだという確信はあったので、帰りの電車に乗ったらすぐさま連絡を取りました。
幸いにも時間が取れるとのことだったので、正式にチームに入ってもらえました。(Puzzler.Kさんは以前から一緒にゲームを作ってる丸ダイスのサークルメンバーです)
帰着後すぐにDiscordでMTGです。 経緯の説明から、ゲームの基本アイデアを伝え、作れそうか?どんなギミックが欲しいか?を聞きます。
Puzzler.Kさんは硬派なパズラーなので、ギミックを増やしたがる丸ダイスを気にせず
- 押せるブロック
- 押すと世界が反転するスイッチ(=逆立ちが「ぶら下がり」になる)
だけで作ることに。 作ってみないと分からない点は仮として、基本的なパズル仕様はここで決めました。
15:00 パズルの作問開始(+6問)
実際に作ってもらいながら、疑問点はDiscordで適宜相談。 箱は押せないとあまり面白くないことが分かり、箱に潰されたらどうするかが問題に。
面白さ・納得感・手触り・パズルの作りやすさの観点で、
- 16:9 に合わせて1画面1問の (8+上下0.5マス)x16
- 順立ち: ジャンプ1マス・ブロックを押せる
- 逆立ち: ジャンプ不可(仮)・ブロックを押せない
- ぶら下がり: 左右移動と落下が可能
- 空中移動: 可能だが重力強め
- 逆立ち・世界反転はプレイヤーやブロックが接地しないと起こらない
- 並んだブロックはまとめて押せる
- ブロック落下と自分落下はブロックが勝つ。圧死はなしで1マスとして挟まる。
こう決まりました。
こんな感じの「ブロックに乗って逆立ちで浮き上がる」問題を中心に6問完成。…まだ動いてもいないのに、おそるべき速度です。
25:00 プレイヤーデザイン相談
MTG後に描くと言っていたデザインが無事出来上がりました。
(世界観がイメージしにくいプレイヤー単体のデザインが上がってきたらどうしよう……)というのはとんだ杞憂。
どれも世界観もイメージしやすい素晴らしいデザインでしたので、一番好みのものを選んでもらいました(真ん中に)
「現代的な町並みを、平然とした顔で女の子が逆立ちで疾走」…見た目のインパクトも十分そうでした。
デザインに一日使ったので、最悪マップチップは素材を活用するかもとだけ伝えて終了。
20:00 プレイヤーの基本挙動実装
パズルの仮仕様MTGまで昼食すら取らずに話し続けて疲れ果てていたので、ぶっちゃけ午後はダラけててました(チャットだけは返してた)。でも夜には開始。
まずは初めて使うUnity TileMapEditorを導入。
棒人間と、フリーアセットで最低限の陸地を用意して、2Dプラットフォーマーの基本挙動をガリガリ実装していきます。
ジャンプのある2Dアクションを作るのは初なので割とイチからゴリゴリ書いていきます。歩行・ジャンプが出来るところまで実装して終了。28時頃に就寝。
どの距離でも1マスに乗りやすいように、カーブエディタで軌跡を描いて空中浮遊のようなジャンプ挙動にしました(結局ほぼ放物線になりましたが・・)
2日目 アニメ出来始め。目標ステージ数追加。地獄のブロック実装
?時間 | アニメ(立ち・逆立ち) | |
?時間 | 反転を中心に+10問 | |
6.5時間 | 逆立ち・ブロック挙動の実装 |
もちろん適宜話しつつですが、ここからは基本分業で作業です。
絵:「立ち・逆立ち」
描いてもらったら、すぐに組み込み!
細かな修正箇所はあったものの、無事2点完了!
問:反転中心に+10問
昨日はあまり作らなかった反転スイッチ系の問題を作ってくれました。
5ステージx3ワールドの予定でしたが、既に15ステージを超えて1問が軽そうだったので 易10,中10,難5 くらいに目標アップ。
「逆立ちジャンプ」は、出来ないことを利用した問題が出た時点で正式に確定。(アニメの作成難度も高そうだった)
また、「天井にぶつかっても擦ったまま平行移動」といった遊びやすさの為の仕様で、一部修正が必要なのが発覚。
マ:箱挙動、さかだち を実装
地獄の「押せて落ちる箱挙動」。せいぜいI字ブロックやL字のブロックを想像していたら、Puzzler.K先生からは既に
こんな問題が上がって頭を抱えていました。要件は
- サイズ1.0の箱がサイズ1.0の穴にハマる。横からも上からもあり。
- 箱が任意の形に連結する
- プレイヤーの上に落ちると、1.0の高さで止まる(プレイヤーは高さ1.0を走り抜けるため、当然1.0より小さい)
- 直感的に共押し(押されたブロックが他のブロックを押す)が起こる
こんな感じです。つらい。 が、気合で実装しました。 大ざっぱに言うと、
箱は常にKinematicで動かし、速度に直交した方向に縮めた形で全ての連結箱を同時にBoxCastしました。
この時点ではバグだらけ。適宜直しました。 箱挙動NG集だけで記事がかけそうなくらいヤバイ仕様。
逆立ちは箱の速度を変えて全部止まるのを待つだけなので簡単でした。29時前に就寝…。
3日目 マップチップは素材利用に決定。ステージ遷移と量産の準備完了。
?時間 | アニメ(走り・逆立ち走り) | |
1時間 | 残りの絵タスクMTG | |
?時間 | 既存の修正と、+5問 | |
5時間 | パズル量産準備、エリア遷移 |
絵:「走り・逆立ち走り」
歩きっぽい絵か走りっぽい絵か迷ってたようですが、どちらも良かったのでお好みにしてもらいました。
移動アニメが入っていい感じに!
絵:マップチップはAssetを使うことに
必須のプレイヤーアニメの進捗的にマップチップ手作りはキツそうだということで、素材を使わせてもらうことにしました。
頑張って探して、合いそうなものを発見。 背景も、これを張り合わせて作ろうという話になりました
問:既存の修正と、+5問
発覚した仕様に合わせて既存のパズルを修正しつつ5問を追加してくれました。
ただし、パズルの右端・左端を揃える・開放的な街なかのイメージにするため左右の端は広めに取る といった新たな修正項目も発覚…。
マ:パズル量産準備、エリア遷移
反転スイッチ以外の仕様が揃って、素材でマップチップを作る許しも出たので、初めて使うTileMapEditorと格闘します。
公式のRule Tileは少し試してやめて、ウディタ形式でタイルを作れるプラグインを使いました。
↑のドット絵CityをPhotoshopに放り込んでタイルを作り、最低限の地形と箱は爆速で配置出来るようにしました。
「どのパズルからでもすぐに確認&ミスなく編集&後から並べ替え」が出来るようにするため、
ショートカット一発で選択中のパズルの開始状態に飛べるようにEditor拡張も整備して、Editor側の量産準備は完了!
クリア判定・ステージ遷移も作りました。クリア演出を凝りたい思いをグッと抑えて、右端に達してたらクリア扱いにしてカメラが遅れてついてくるだけ。29時半就寝。
4日目 パズルの並びを本格的に考え始める。必須アクションは実装完了。
?時間 | アニメ(押し) | |
1時間 | パズルの並べ方MTG | |
5時間 | 世界反転、ぶら下がり、軽い演出を実装 |
絵:「押し」
> ロ<)
これの時に、横何ピクセルが当たり判定か決めました。
問:パズルを並べるには反転ゴール考慮が必須と判明
パズルを正確に理解しないとワールド内のパズルを並べられないことが分かったので、Puzzler.Kさんにやってもらうことになりました。
例えば、「2-4 ほかくのわな」のパズル原案はこれですが、
完成形では上下反転して配置されています。
どういうことかというと、原案のパズルは問題によって上下が反転したままゴールすることがあるので、その次に配置するパズルは上下反転しておかないと
パズルが成立しないです。実際、1つ前の「2-3 ぐるぐるぐる」は反転ゴールなので、
無事原案通りになります。これがこの日に判明し、Puzzler.Kさんに並び替えをお願いすることに。
マ:世界反転、ぶら下がり、BGM
「世界反転はこれをY Scaleで多分出来る」、という下準備はしていたのでやってみたらあっさり完了。
箱も親にスケールが入る前提で実装していてよかった…。
プレイヤーだけが反転のルールに背くので、反転が終わった瞬間スケールリセットして座標を身長分ズラしました。意外と違和感なく繋がりました。
このあたりからBGMやSEも適宜入れてました。
ドット絵なので音も可能な限り電子音やピコピコ系で揃えることに。初の試みだったので苦労しました。
もう4日目なのに ザ☆チュートリアル みたいなパズルが4つ並んでるのが世界の全てだったことに不安を覚えてました。29時半にコミットが切れてました。
5日目 怒涛のワールド配置とあふれ出るバグ
?時間 | アニメ(逆立ち開始)・反転スイッチ | |
?時間 | ワールド1,2の並び替え | |
?時間 | ワールド1,2の配置 |
絵:「逆立ち開始」・スイッチ
www.youtube.com (フチヌローさんのYoutubeお借りしました)
完成のために必須なアニメではないのですが、逆立ちアクションの感触が段違いに良くなる確信があったので入れてもらいました。
当たり前に見えてすごく工夫されたアニメなので、フチヌローさんの振り返り記事を是非ご覧下さい。
(逆回し出来そうだったので、「逆立ち解除」にも使いました。こっそりと…)
仮で作ったプログラマー臭い世界反転スイッチの画像が
秒でキレイな画像に!スゴイ!
問:ワールド1,2を並べ替えて、配置
Puzzler.Kさんが並べ替えたのを、丸ダイスがガンガン配置していきます。
このあたりで、W1:逆立ち W2:世界反転 W3:箱リフト と、必須要素が増えるタイミングと、各ワールド10問ずつになることが決定。
並べるはパズルの左右端をつなげたり上下を気にしたりと考えることが多くて大変です。
配置するの方が早いですが、新しいパズルで起きたバグやワールド2から登場する上下反転配置で時々実装してたのでどっちもどっち。
ちゃんとしたパズルがゲームっぽくつながって、急激にゴールが見え始めました。最終コミットが28時半でした。
ワールドクリアしても虚無の空間に落ちて Index out of Exception になる以外は
6日目 全アニメ完遂! 全配置完了! デバッグしながら演出強化
?時間 | アニメ(ジャンプ)、背景作成開始 | |
?時間 | 別解潰し、通しデバッグ | |
10時間 | にぎやかしデブリ、反転エフェクトなど演出 |
土曜日。寝て起きたら午後でした。
問:ワールド3の配置。パズルの通しチェック
ワールド3は仕様的に新要素はないので手早く配置。 17時頃には全10x3ステージの配置は終わってました。
物量的には十分すぎたのでレベルデザインは品質上げのフェーズへ。
ここで「Google DriveによるUnityプロジェクト共有」という罠がついに牙を剥き、
Puzzler.Kさんはプロジェクトの丸ごとダウンロードを何度かやるハメになりました……。
…ともかく、私以外で初めてEditorを触るPuzzler.Kさんがパズルの別解チェック兼、問題なく遊べるか通しデバッグしました。
パズルをどう直すかはPuzzler.Kさん次第なので、丸ダイスは他の作業と平行して言われるがまま配置を修正…。
絵:「ジャンプ」
祝!全アニメ完成です!
絵:ストーリー共有。背景を作り始める
ワールド構成が決まった時点で脳内確定してたプチストーリー
- 朝: 登校中
- 夕方: 下校中
- 夜: 夜遊び
を、いよいよ背景に取り掛かる段階でフチヌローさんに共有。
朝・夕方・夜 さえ合ってれば良いので、背景画像の構成(画像の分割方法、枚数・ピクセルサイズ、リピート有無)はおまかせしました。
マ:演出面の強化
無音で地味な演出、どこまでも同じ背景、タイトルなし、ワールドの終わりは虚無の空間…という状態だったので、
にぎやかしデブリシステム
「適当な小さいアイテムをばらまいたら絵的にハデだし、重力の変化が視覚的に分かっていいジャン!」と思ってたので作ってみた。
↑多すぎることに気づいてない頃
配置もスプライトのランダム化も自動化すると、なんかジャラジャラ出したくなっちゃう病気。
さらにプレイヤーが蹴飛ばしたり出来るようにもしたけど、処理も重かったし気が散る、プレイヤー接地がなぜかまれにバグる という最悪の自体で正気に戻りました。
↑正気に戻った後
箱としかインタラクションしないようにして、数も2~4コ。地味だけどアクセントになりました。
(ゲームと関係ないのに、開発中一番バグ調査に時間を浪費しました・・・)
逆立ちエフェクト・世界反転エフェクト
合わせて遷移時間とかも調整。ここで「逆立ち」「世界反転」の感触が一気によくなりました。
特に、曲調が変わって2-1で初めて出会う「世界反転」は、いまだ未知の不思議なことが起こるワクワク感を出したかった。
寝ないつもりで朝を迎えたのに起きたら昼だったので、30時(6時)~11時くらいが睡眠時間だったようです。
7日目 背景滑り込み完成!いろいろねじ込んで間に合…ってないけど完成!
?時間 | ワールド2,3の背景素材・ゲームサムネイル | |
?時間 | デバッグ・パズル最終調整 | |
10時間 | ストーリー演出、タイトル画面、ポーズ・スキップ、ランキング、リリース作業 |
~12:30 マ:デモ作成
Recolitの開発経験とコードを活かして、プチストーリーに合わせたセリフを入れました。
ワールドクリアとワールド開始が基本ですが、
1-1はあえてなしで1-2に最初のセリフを持ってきたのがにしたのがすぐに触れるゲーム体験に出来ていい感じに。
~17:30 問:デバッグ・パズル最終調整
デバッグ・別解潰しを続けてましたが、17時ごろに最後の問題修正を入れたらもうやることはないので離脱してもらいました。
挙動バグは一応報告してもらいましたが、すぐ直せないものは諦めました。
~18:00 絵:背景素材全部!
昼に起きたらワールド1の背景は出来てました。
レベルデザインに合わせた背景になっててビックリ。Editorすら開いてないはずがどうやって・・・。未だに謎です(今度聞いてみよう)。
質が落ちても全部揃えることを優先してくれて助かりました。最後にガッツが出せるクリエイターは強いです。 おかげで2,3の背景も18時頃滑り込み。
サムネイル画像を作ってもらいつつ、丸ダイスはリリース作業に専念します。
~18:00 マ:タイトル画面
少し悩んでゲームタイトルも決めました。逆立ちをひらがなにすると締まりがよかったのでシンプルに「さかだちの街」。
何気にマウス・キー両対応のUIです。
最後の追い込み
~18:45 ポーズ・スキップ機能
一本道パズルは詰むと即「キミの冒険はここまでだ!」なのでねじ込みました
~19:20 ランキング
NCMBを使ったことあるとは言え、インポート等含めて30分なのでやっぱりスゴイ。全クリ自慢くらいしか意味がないのでおまけ。
naichiさんの「とにかく手軽に」の心遣いが染みる… GitHub - naichilab/unity-simple-ranking
~20:00 ビルド&リリース(ver1.0.0 公開出来ず)
IL2CPP重いよ~(いつもの)。ビルド失敗してない! 滑り込んだ! と思いきや、1-1で即地形抜け。
WebGLでPhysics2Dがそもそも動作しない最悪のケースが浮かんで真っ青になりました。 フチヌローさんに土下座して、まずは深呼吸。
~20:30 リリース(ver1.0.1 公開!)
よく考えたら落ちてるんだからPhysics2Dは動いてます。TileMapのコリジョンが死んでるいう感だったので、お願いGoogle!ですぐ対処出来ました。
(原因は、「Tile Mapに使うテクスチャはWrite Enableにしないとビルド時にTile Colliderが当たりを作れない」。知らんがな。)
最低限遊べることだけ確認して、公開!!! せっかく無遅刻ペースだったんだもの!
~21:50 リリース(ver1.0.2 バグ修正して完成!)
ほぼ空だった説明を書いたり、「遊んで下さい!」と言える状態に。 お二人と挨拶して解散!お疲れ様でした!!
~22:30 宣伝ツイート
さかだちって、あべこべに見るとぶら下がって見えませんか?
— MaruDice/丸ダイス (@dice_maru) 2020年3月1日
というわけで、画面をひっくり返した時だけ、「さかだち」が「ぶら下がってる」にすり替わるゲームを1週間で作りました! 遊んでると脳がバグってくる面白いゲームになったので、遊んでみて下さい!#unity1weekhttps://t.co/wsAllNeICa pic.twitter.com/hcFXGhQlJA
バズりたい~!
振り返って
反省点
Google Driveでのプロジェクト共有はキツイです。代替手段、プリーズ……。
よかった点
フチヌローさんの可愛いドット絵やPuzzler.Kさんの解いて楽しいパズルは、ゲームに大きな魅力を与えてくれて、私には作れないものです。
ゲームはいいものを作るために求められる専門性があまりにも多いです。そこそこレベルなら「全部俺」も可能ですが、少なくとも私にはすべてを高いレベルで習得出来そうにないです…。
自分に作れない魅力を作り出せる人とのチームは、コミュニケーションなどの困難を補って十分なほど
私の目指す「より良いゲーム作り」を助けてくれるものだと、改めて確信することが出来たのがよかったです。
あとは単純にいいゲームが作れました!
で結局、「1週間で1時間規模のパズルアクションがなぜ作れたか」?
それはまぁ、3人いたからでは…
8日目~(?)
丸ダイスのゲームジャムは、もう少し続きました(続く?)
オチ:
#unity1week 投稿二本目です!(?)
— MaruDice/丸ダイス (@dice_maru) 2020年3月7日
FPSとTPSはあるのにSecond Person Shooterってないですよね?作りました!
5人いるのに自分「以外」の敵視点が全部見えてて、奥から手前に敵を狙う対戦シューター!
狂ったゲームだけど、逆に敵がこっちを狙うのも見えるのが面白いwwwhttps://t.co/bZ6nJLVCva pic.twitter.com/MFCge63imO
【Unity】Assetが未使用かプロジェクト全体をチェックする「ReferenceFinder」の紹介
こんにちは!丸ダイスです!
unityで開発していて、
「このAsset多分使ってないから消したい! でもホントに使ってないか自信がない…消してエラーのなるのは嫌だ…」
って時ないですか?私はあります。 複数人で開発してたりプロジェクトの規模が大きくなった時は特に。
そんなときに便利なのがこの「ReferenceFinder」というエディタ拡張です。 使用イメージはこんな感じ
Assetを右クリック→「Find References」で、プロジェクト内での全ての参照元を表示してくれます。 あるAssetが使っているAssetを洗い出してくれる「Select Dependencies」という標準機能がありますが、その逆ですね。
参照が0なら消してOKということですね。
参照元のAssetを選択したりそのAssetからさらに「Find References」をしたり出来るので、Assetの依存関係を整理する時に超便利です。
元はこちらのDave Lloydさんが公開されたものです。
これでも十分便利ですが、私が少し改良したコードも置いておきます。
未使用チェックではこちらの方が便利だと思います。
改良点:
- Prefabからの参照のみチェック → Prefab/Scene/ScriptableObject すべてに対応
- 孫参照を無視するかどうかを選べるようにした
Image Laboさんとの「Recolit」共同開発のお知らせ
ばんばんわ!丸ダイスです!
いくらか前から、みんな知らないけど実は丸ダイスが作ってるゲームがあるぞという報告ですよ!
それがこちら、「明かり」をたよりに進んでいくアドベンチャーゲームの「Recolit」です。
RecolitはサークルImage Laboのむじさんがメインで作っているゲームです。
味のあるドット絵やシナリオなど、物語作りの中心はあくまでImage Laboなので
丸ダイスくんの役割はプログラムをモリモリ書いて挙動をいい感じに仕上げるところですね!
今の最新のPVはこちら。
本編はまだまだ開発で、この冬コミにバージョンアップした体験版が出せるかも!ということで丸ダイス共々頑張って制作中です!
アドベンチャーゲームはイベント固有の挙動が引くほど多いのが難しいところですが、そこはTreehouse Riddleの開発経験が活きてるのを感じながらキビキビ開発しています!
ちょっと言い訳…
「ま、プログラムだけなら並行開発でもいけるやろ!」…と、最初は思っていたのですが、意外と大変でした!
開発中にもお構いなしにゲームジャムに参加したり他にも原因はあるのですが、丸ダイスの開発スタイルはエクストリームかつフリーダムなので、
メインで作ってるゲームがちょっと遅れても、気長に待って頂けると幸いです。ちゃんと進んでるよ!
【おしながき】コミックマーケット97
こんばんは!丸ダイスです!
コミックマーケット97の出展情報です!
場所は
12/31(火)4日目 南メ-45b
です!今回は、ぶっちゃけるとあんまりイケてないです!
1.「地球人の島」(C97体験場)100円
完成間近!・・・というほどではないです! でも、確実に進んでますよ!
もうちょっとお待ち下さい! 数はあまり持っていかないので、制作中のものでも触ってみたい!という人はぜひどうぞ!
ほか既作
- 「EQUALINE」(既作)1000円
- 3.「Treehouse Riddle ver2.0」(既作)1500円
- 4.「ピタゴラスの永久機関」(既作)1000円
この辺はいつもどおりです!EQUALINEは委託・ストア販売などないので欲しい方はこの機会にぜひどうぞ!