見出し画像

脱出ゲームをリリースしました

こんばんは、最近「作業するぞ!」と意気込んでは、いきなり寝落ちしているパターンが多い星凪樹です(;´Д`)

いやもう、ホントパッと気付くと寝てしまっているんですよ!時が飛ばされてるというか、ジョジョでいう「キング・クリムゾン」的というか……それだけ疲れているってことなんですかね(´・ω・`)

さて、今回は「新作ゲームをリリースしたよ」というお話です。




作ったゲームの概要

今回作ったゲームは「Escape from House」という題名で、シンプルな脱出ゲームとなります。自宅に閉じ込められた主人公が、脱出できるとゲームクリアです。

典型的なポイントアンドクリックゲームとなっており、気になった箇所を調べると何らかの反応(ヒントとなる文章の表示など)が返ってきたり、アイテムを選択した状態でクリックすることにより、そのアイテムを使用することが出来ます。


制作に至った経緯

私は昨年度から、ゲームエンジンの一つである「unity」を用いたゲーム開発をしており、作った作品は全てunityroomで公開するようにしています。

その中で「今年はどんなものを作ろうかな?」と考えた時に、ふと気付きました。「脱出ゲームがないやん!」と。

脱出ゲームといえば、Apple StoreやGoogle Playで検索すると数百・数千もの作品が出てくる、かなりメジャーなゲームジャンルです。unityでの制作難易度も低いとされており、ネットを調べればたくさんの作り方が紹介されています。

昨年度は、オリジナリティに拘るあまり、傍から見ると「これってどういうゲーム?」と言われかねない作品を作ってしまったなという自負もあり「今年はもう少しコテコテなジャンルを作ろう!」ということで、脱出ゲームを制作する運びとなりました。


制作の参考にした講座

まず手始めに、オンライン学習プラットフォームの「udemy」にて、以下の講座を受講しました。

この講座では基本的な3D脱出ゲームの作り方を学ぶことが出来ます。一見するととても値段が高いように思われますが、udemyでは頻繁にセールを行っておりますので「自分も脱出ゲームを作ってみたい!」と思う方は、セール時に購入することをおすすめします。講座によっては90%オフとかになっていたりするので……w

私も、以前気になって買っておいたので、一週間くらいでパパッと受講しました。私はその日によってやる気にムラがあるタイプなのでそのくらいかかってしまいましたが、人によってはもう少し早くできると思います。


実制作期間

制作を始める前に、通っている学校の先生に脱出ゲームを作りたい旨を相談したところ「脱出ゲームは作成難易度もそんなに高くないし、ポートフォリオの目玉にはならないよ」とのことでしたので、早めに制作を終えることを意識しました。

基本的な仕組みや見た目は一週間程度で作り終わりましたが、その後少し失速。最終的にかかった日数は二週間程度となりました。


制作で意識したところ

RequireComponentの使用

unityでは、各GameObjectに「コンポーネント」と呼ばれる部品を付与(アタッチ)することによって、そのGameObjectに役割をもたせます。

スクリプトもコンポーネントの一つであり、そのスクリプトが別のコンポーネントにアクセスすることによって、GameObjectを動かしたり、音を鳴らしたりと言った様々なことができるようになるのです。

今回はアイテムや扉など、様々なものに対してスクリプトをアタッチすることが分かっていたため、人力では必要なコンポーネントをアタッチし忘れてしまうことが起こりえました。

そのため、必要なコンポーネントを、自動的にアタッチしてくれる「RequireComponent」属性を使うことにしました。

これを使うことによって、予め必要なコンポーネントを自動でアタッチすることができ、アタッチ忘れによるエラーを防ぐことが出来るだけでなく、手動でアタッチする手間を省くことができます。

今までの作品では、手動でコンポーネントをアタッチしていたので、今回この属性の有難みを身をもって感じることができました。スクリプトを組む際にも「これは何をするスクリプトなのか」を意識して書くことが出来たので、各スクリプト毎の役割を明瞭にすることが出来たと思います。


データの取り扱い

今回はTextMeshProを使った文字送り表現や、ビジュアルノベルで良く使われているメッセージボックスを取り入れたかったのですが、今までやったことがなかったので、どのように実装するのかは少し頭を使いました。

最終的にはアイテムのデータと同じく「ScriptableObject」というデータを格納するクラスを使い、そこから表示する文章などを引っ張ってくる形に落ち着きました。

今まで技術として存在は知っていましたし、少しだけ使ったこともあったのですが、本格的なデータベースとして使用したことはなかったので、勉強になりました。外部のcsvファイルを読み込んで、ScriptableObjectにデータを流し込む事もできるらしいので、次回はそちらにも挑戦してみたいです。


制作で苦戦したところ

ギミックの制作

今回の脱出ゲームでは、ギミックの一つとして「パスワード」を導入しました。これは、脱出ゲームでは良く見られるギミックですので、脱出ゲームを制作するにあたり是非作りたいと思っていたものでした。

パスワードのギミック自体は、上で紹介した講座でも制作方法が紹介されていたのですが「パネルに予め配置した数字を切り替えて、設定したパスワードと合っているか確認する」というやり方のため、他の表示方式、例えば電卓のような「キーを入力すると、数字が追加で表示されていく」ようなやり方には対応が難しいものでした。

パネルに予め配置した数字を切り替える例

キーを入力すると、数字が追加で表示されていく例

最終的にはどうにか破綻なく組み込むことが出来ましたが、コード的には洗練されているとは言い難いものですので、今後機会があったら修正したいなと思います。


アイテムの配置

これはスクリプトなどではなく、どちらかというとレベルデザインに関係した部分なのですが、アイテムの配置には頭を悩ませました。

難しい難易度にしたくなかったので、どれくらいアイテムを配置すればいいのか、どうすればアイテムに気付いて貰えるのかなど「プレイヤーに見つけてもらうための工夫」が必要だったのですが、結果としては不十分な出来になってしまった感は否めません。

やってる途中で「こんなに引き出し開けるやつなんていないだろう!」と気付いたので、やめました

アイテムの配置はすぐに修正が出来ますので、学校の友人などにプレイしていただき、改善していければなと考えております。


追加で実装したい項目

ヒントパネル

ヒントをゲーム中に自然に盛り込み、それに気付いてもらえれば一番いいのですが、そうは言っても中々難しい部分もあるため、ヒントパネルを作って、どうしても解らない時はそれを見てもらうようにすれば、良い感じがします。


追加エンディング

制作途中に「何個か他のパターンに分岐できれば面白いよね」という話があり、実際にアイデアも思いついてもいるのですが、とりあえず完成を目指したのでオミットしてしまいました。

我ながらけっこうおバカなアイデアだったと思うので、余裕が出来たら是非入れてみたいです!


最後に

今回作った脱出ゲームのシステムは、別の作品を作る際にも使えるものだと思いますので、もしかしたら今後、今回作ったシステムを流用して、また新しい脱出ゲームを作るかもしれません!

その時は、今回実装できなかったことや、ギミックなども盛り込んで制作できればいいなと思います(*^^*)

この記事が気に入ったらサポートをしてみませんか?