見出し画像

【ClusterGAMEJAM】「ラピッドライナー」制作話

=͟͟͞͞ 🎁ヽ( '-'ヽ)アリガトウゴザイマス!!

こんばんは。バーチャルクリエイターの柏葉くるみです。本記事はclusterのアドベントカレンダーである「Cluster Creator #1 Advent Calendar 2022」の4日目の記事です。


先日clusterにて、半年に一度のゲームクリエイターイベント「ClusterGAMEJAM」が開催され、「Creator Kit部門 準大賞」を頂きました。本当にありがとうございました!

今回の記事では、制作したゲーム「ラピッドライナー」についてお話ししたいと思います。

ある程度はまとめていますが、なるべく多くの情報を入れるため、考えていた事を箇条書きに羅列した記事になっています。そのため、色々なジャンルの話がごちゃ混ぜとなっています。(目次から好きな項目だけ見るというのもオススメです)

それでは本編どうぞ!

①ゲーム紹介

ラピッドライナー(自作品宣伝)

今回のお題「はかる」に合わせて、「指定された物と指定された距離を測り、シューティングをする」ゲームを作りました。clusterアプリから遊べるので是非!


②アイデア出しの話

1つ目の項目は「アイデア出し」についてのお話です。

ゲーム制作に限らず、「何を伝えたいか?」「どの技術を使うか?」といった方針というのは、あらゆる作品を作る上で非常に重要です。このアイデア出しの時間には、ゲームの芯となる「コンセプト」や、ゲームの仕組みである「ルール」をざっくりと決めます。

ゲームジャムでは時間が限られている関係上、ゲーム要素の取捨選択する事が多々あるので、コンセプトをしっかり定めておく事は特に重要となります。

それを踏まえた上で本編へどうぞ。

お題開示前の話

以前までのゲームジャムではやってこなかった試みなのですが、今回は事前に作りたいゲームジャンルを決めて参加しました。

というのも、私がこれまでに作っていた作品は、「MartialDistance」「E-mo」「MentalCube」等々、少しパズル系のゲームに寄っているなと感じていました。前回のGAMEJAMでは新しい挑戦が出来ず不完全燃焼だったので、今回は一年ぶり(『Sci-Fi Leap・Beercity』以来)のアクションゲームに挑戦しようと決めていました。

ところで、ゲームジャムにおいて、お題開示前に作るゲームを決めるというのは結構リスキーな選択だと思っています。というのも事前にゲームルール等まで固めてしまうと、どうしてもお題にこじつけした感じが強くなってしまうので、こじつけを避けたい場合はあんまりお勧めしません(特にアイデア方面で勝負したい方)。

今回はざっくりとアクションゲームというジャンルで決めていたので、無理のある関連付けにはならなかったです。ただ、採用できるアイデアはかなり制限はされたかなという印象です。当たり前といえば当たり前ですが。

お題「はかる」に関して

前回の「かける」以上に、ゲームという側面に大分寄ったお題だな、というのが第一印象でした。今回のClusterGAMEJAMは「ゲームジャムだけど、ワールドクラフトなどゲームじゃなくても大丈夫」といったスタンスだったので、正直こういうタイプのお題は予想外でした。

以前のゲームジャムのお題である「ソーシャル」や「溢れるエナジー」といったように直接ゲームに関係しないお題とは違い、(言葉遊びをしなければ)ダイレクトにゲームルールの要素として使えてしまえそうなお題ですね。

行き詰ったときはとりあえず情報収集から始めます。とりあえず「はかる」で調べると、主に『①「図る」「測る」「計る」といった数を数える(?)タイプの単語』か、『②「謀る」』の2種類が出てきました。

私は毎回「このお題に一番ドンピシャなゲームを作る!」を目標としているので、言葉遊びは極力使わないようにしています。ので、①②以外は没。また、ソロプレイゲームの方が作りやすい事もあって②も難しいかなと。

など消去法的に考えていた結果、ありがちなアイデアしか思いつかず、MartialDistance,E-mo,UnlimitedStreetを作った際にあった「ビビーン!」という感じのアイデアにたどり着きませんでした。正直、最終的に採用した「距離を測って射撃するゲーム」も、内心ありがちだな~と思いながら出したアイデアでした。

私はやる気が感情に左右されやすい性格をしているので、「ビビーン!」のような直感を大事にしています。その為、今回はかなり焦りながらアイデア出しをしていました。

結局たどり着いた結論は、「最初のアイデアはありがちで良いけど、ゲームとしてしっかり完成度の高いものに仕上げよう」といった感じでした。

制作後に改めて考えると、新しいアクションゲームを題材に作るというのは、「奇抜なアイデアで100%楽しい」よりも「新しい発想を1%、レベルデザインで99%楽しませる」くらいに思ったほうがよいのかな…となりました。今までは奇抜なアイデアでパズルゲームを作る!というスタンスだったので、挑戦の意味も込めて、ありがち(?)な「距離を測って射撃するゲーム」で勝負する事にしました。

完成後、斬新なアイデアですね!と何回か言ってもらえたので、自分が思っていた程ありがちではなかった事にびっくりしたりしました。

距離を銃弾にするゲーム(デジャヴ)

ちなみにこのアイデアにはもう1つ側面があって、それはゲームシステムが自分の過去作品「MartialDistance」に似通っているところです。

MartialDistance
第1回clusterGAMEJAMにて作成。ソーシャルディスタンスを確保する事により銃弾が発射できる

という事もあり、今回の製作では意識的に「MartialDistance」と差別化をしようという目標がありました。

MartialDistanceはどちらかというとパズルゲームの側面が強く、「頑張って息を合わせて銃を撃つ!」ゲームだったので、なんとなく「距離を測るって地味だよなぁ…」という印象を持っていました。(それはそれで楽しいのですが)

というのを無意識的に考えていって、今回のラピッドライナーでは、最終的に「本来地味な『測る』という行為を派手にキメるゲーム」という大きなコンセプトが誕生しました。ゲームの概要欄に書かれた一言(※)もここから来ています。

(※)『派手か地味かは私が決める』

派手(スタイリッシュ)にキメるという部分は以前作った「Traveler」というゲームのコンセプトに近いので、デザインも似たような感じになりました。
私のデザインの引き出しが狭いだけというのもありますが。エセデザイナーなので。



③ゲームデザインの話

ここからは、アイデア出しで出来上がったコンセプト(「地味な『測る』という行為を派手にキメるゲーム」)やゲームシステム(「距離を測って射撃するゲーム」)を、実際にゲームとして形にしたお話です。

時間配分の徹底

「どうぶつの森」や「Minecraft」等、自分がやりたい事を選んで自分のペースで遊ぶゲームとは違い、今回作るゲームは短期間のスパンでがっつり遊ぶタイプのゲームでした。こういった短時間のゲームでは、プレイヤーがどの場所でどのくらい時間をかけ、そしてどのくらいで飽きるのか、というのを経験則(※)から計算する必要があると私は考えています。

(※)クリエイター的経験則よりかは、ゲーマー的な経験則の方が役に立つ場合が多い気がしています…たくさんのゲームをプレイして、自分がどこで飽きたのかを分析したり。

別のゲームで例を挙げると、FPSゲームである「Apex」「フォートナイト」は、「時間によって狭まる範囲の外に出るとダメージを受ける」というルールによって、「どの時間帯に何をさせるか?」といったようにある程度クリエイター側から時間の制御を行っています。今回作ったゲームに関しては制限時間の決まったゲームなので、完璧にこちら側から時間配分の制御が可能でした。完璧に時間配分が出来るので、ゲームというより動画を作っている感覚に近いかもしれません。

今回はスタイリッシュな世界観のゲームとは裏腹に、場所を移動して銃を撃つという同じ事を何回もやらせるゲームスタイルだったので、なにかしら対策を打たないと絶対に途中で飽きるなと思いました。

という訳で、色々なゲームでよく見る「段々レベルアップしていく」方式をとりました。具体的には、時間毎に遊べるエリアを拡張し、速度と跳躍力を強化し、段々と規模を上げる,段々と難しくしていく。といった感じです。前半はゆっくり地上を歩いているのですが、最後は町中を自在に飛び回りまわり見える景色も大分変わり爽快になっていきます。
また、段々と難しくしていくと後半に点数がとりにくくなり最初が重要になりすぎるので、追加点数も時間によって増えるようにしています。

追加点数が増える仕様を説明文に書き忘れてしまったのは最悪でした….
現在は追記してあります

まとめとして、「ゲームしている人は思っているより途中で飽きやすいので、何をどのくらいの時間やらせるのかを頭に入れてゲームを作る」というのを大事にしながら作っています。

レベルデザインについて

レベルデザインの考え方についての話は上の項目で語った事が9割なので、残りの1割について語っていきます。

的について、当初は動く的や点数が高い的などバリエーションを増やす予定でしたが、ゲームジャムの時間制限に合わせて没となりました。結果的には現在のままでも十分楽しいと思ったので、そのまま(※)にしています。

(※)的の配置はゲームジャム期間中そのままですが、速度の調整や青い宝石の位置の変更等、別角度からルール調整を行っています。

レベルデザインの調整は時間切れで満足するまで出来なかったのですが、ある程度的の密度にバラツキを設ける事で、「一度距離を測り終えてもある程度移動するとスコアアップに繋がる」といった上級者用の駆け引きも生まれたので結構良い配置が出来たんじゃないかなと思っています。

不公平の話が出たので、ランダム要素についての説明も。今回はClusterCreatorKitにてスクリプトが追加された影響もあって、少し複雑なランダム要素がふんだんに使われています。その為、現在地に近いお題が提示されたり、的の多い場所が指定されたり等、所謂「上振れ」が発生します。初心者なら都合の良いお題で嬉しくなったり、上級者ならハイスコアの為に複数回プレイする理由になったりもしました。今回のゲームを1周5分という設定にしたのがこの周回しやすいゲームデザインにもピッタリはまったなという印象です。

良いゲームには「ランダム要素」「実力の反映」のバランスが大事と思いますが、今回のゲームに関しては最高のバランスに仕上げられたと個人的に思っています。

街のデザインについて

自分はワールドの見た目を良くする能力があまりないので、ある程度自分の頭の中に「やる事のテンプレート」を作り、UIやProcessing設定を作っています。ソロ参加ゲームジャムでは特に自分の得意分野に時間を割く事が大事だと考えているので、こういった苦手分野はなるべく「ちょろっとやってある程度のクオリティ」が出来るようにしたいなぁと思っています。

今回はモデリングをしないでアセットを使うので、ある程度の要素が決まった段階でアセットストアを眺めていました。一定以上ワールドのイメージが固まってしまうと、イメージとぴったりのアセットを探すのが大変になってしまうので、イメージを固める作業とアセットを探す作業を同時進行で進めています。
今回は街のアセット、車や廃墟等のアセットをダウンロードしました。宝石のアセットは前回のゲームジャムで使用したアセットをもう一度使用しています。



④実装関係の話(スクリプト)

最近clusterのアップデートにて、javascriptである程度の処理が書けるようになったので、そちらについてのお話です。

スクリプト、どう使う?

今回のClusterGAMEJAMについて語る上で外せない話題が「ClusterCreatorKitでJavaScriptが対応した」事だと思うので、自分なりに語りたいと思います。

スクリプトですが、単純に出来る事が更に広くなって、ゲームにも大分幅が持たせられるようになったな、という印象です。1つ1つ挙げていくと、

①条件分岐が楽に
従来のLogicでは、判定に3つの条件が必要な場合、Logicでは「条件1,2が達成していたらフラグ1をtrueにする」「フラグ1がtrueで条件3が達成していたら判定成功とする」という手順を踏む必要があったのですが、scriptでは単純に論理演算子(この場合は&&)で「条件1,2,3が達成していたら判定成功とする」という分かりやすい実装が可能になりました。
その他にも、switch文が使えるのが個人的に嬉しいポイントでした。従来の場合、条件の数と同じ数のLogicを追加する必要があったので..…

②配列が使える
配列が扱えるようになり、以前より多くの値が視覚的に分かりやすく扱えるようになりました。ゲームに使用するパラメーターの管理がしやすくなり、レベルデザインの調整が格段にやりやすくなった印象です。

③ランダムが使える
正直TriggerLottery(以前からあったランダム機能)を使った事がないので、あまり違いが分かっていません。まあ、配列と組み合わせたり出来るところはとても良いですね。
今の所把握している大きな違いとしては、配列と組み合わせる事でカードを重複なしで抽選するといった、条件付きのランダム要素の仕組みも作れるようになった…ところですかね?

逆に気になった所は、1つのアイテムに対して1つのスクリプトしか対応できない点です。Unityは本来、1つの機能に対して1つのコンポーネントを付ける事が普通なので、不便に感じました。

なるべく1つのスクリプトに1つの機能だけ実装したいという気持ちが先行し、今回の実装では「スクリプト必須の機能だけスクリプトで書き、残りは従来通りLogic等で実装する」という方式で実装しました。

位置計測について

ここからは、実際に使用したスクリプトと合わせて紹介したいと思います。

実際のコードです。銃にセットしたコードですが、弾を発射する系の処理はスクリプト実装以前と同じくLogic等で制御をしています。

長々と書いていますが大切なところは

let dist = Math.trunc(playerPoint.clone().sub(point).length());」

だけです(公式の記事を参考にしています)。

それぞれ解説すると、

①subでお題の場所とプレイヤーとの位置関係を計算
②lengthで位置関係のVector3を距離として計算
③Math.truncで結果を整数にする(切り捨て)

となっております。

位置取得について

場所の位置を読み取る方法ですが、現状のclusterスクリプトでは①スクリプトがついているアイテム②子要素のオブジェクト の2つからしか位置を取得できません。ラピッドライナーの場合、

全部手入力しました。ゴリ押しではありますが、一番分かりやすい実装方法だと思います。入力ミスが多発するので、スマートではないですね。

他オブジェクトの距離を取得する別の手法として、Vinsさんの「子要素オブジェクトを、Position Constraintで取得したいオブジェクトに追従させる」という方法もあります。こちらの方式のメリットとしては、動くものにも対応できる所が挙げられます。

レベルデザイン系の話

たまにローマ字日本語変数を作ってしまう("point_bairitu")

スクリプトで記入をした所、パラメーターの視認性が良くなりました。時間毎に移動速度,ジャンプ力,ポイント倍率がどのように推移していくのが分かりやすいですね。

スクリプトの最大のメリットはやはり視認性にあるなと改めて実感しています。こういったように色々な数字を自然に並べられると、後半の速度をもっと上げる…など、Logicと比べてゲームバランスの調整もグッとやりやすくなったと感じています。

⑤実装関係の話(スクリプト以外)

以降はスクリプトは関係ない実装の話についてお話していきます。具体的に言うと、見た目の調整の話がメインになると思います。

Postprocessingについて

今回使用したPostProcessingをざっと羅列していきます。

Bloom
おなじみBloom。ワールド上の光をぼわ~っといい感じにしてくれます。プレビューで全体の雰囲気を見ながらIntensityを調整していきました。尚、Threshold(光る閾値)に関しては1.1ですが、アバターが光ってしまうのを避ける為にもう少し上げても良いかもしれません。
閾値を1.1にしたのはこちらの記事を参考にしています。こちらの記事はその他にもワールドのクオリティを上げるPostProcessingのコツが目白押しなので、clusterワールドクリエイターの方は必見となっています。

ColorGrading
今回(おそらく)初めて試してみた項目です。illustratorやclipstudio等の画像編集ソフトである「コントラスト,色温度変更」をリアルタイムでやってくれる機能です。PostProcessingはアバターにも反映されるので、ワールドと違う世界観のアバターもすんなりワールドに馴染むようになります。
具体的な値は「Temperatureは-30.5、Tintは2.6、Contrastは20.8」です。

AmbientOcclusion
隅を黒くしてくれる機能です。私はゲームジャムの際、時間節約のために影のベイクをしていないのですが、AmbientOcclusionのおかげでベイクがなくても物の存在感や前後関係の分かりやすさが高まってくれます。
ちょっと用意した画像では分かりにくいですが、白い部屋でやると分かりやすいので是非試してみてください。
尚、デフォルトカラーは黒すぎるので、淡い青色に設定しています。

静止画だと分かりにくいけど、動いてみると結構違う。

UIについて

Fogについて

色を除いてデフォルトそのままなので軽くのみ触れたいと思います。

今回作成したゲームは物を探すタイプのゲームですので、Fogの強さは難易度に直結します。とはいえある程度なら距離メーターで把握が出来ると思ったので、雰囲気重視で少しだけ強めのFogに設定しています。(Density:0.01)

Fogの色について。おそらくFog関係の記事には必ず似たような記載があるかと思いますが、FogはSkyboxには反映されないので、Fogの色は地平線の色と合わせてあげると馴染むかと思われます。

真っ黒の場合、シルエットが目立つ。
これはこれで好き
Skyboxと似た色を選択した場合
背景に溶け込んでいる

Fogは設定するとSceneが非常に見えにくくなり、不満に思った方もいるかと思われます。私は不満でした。しかし、設定でSceneビューのみFogが非表示になる設定があるので、編集中だけクッキリ見えるようにする事ができます。Unityはこういった細かい需要にも対応しているケースが多いので、非常に助かっています。

Fogがかかっていて、見つけたいアイテムを探すのが大変
オブジェクトが見やすく選択しやすいように。
サムネやPV撮影の際は逆にチェックをつける。

Terrain

雑に作ったので言う事はありません。
逆に言うと、Terrainメインのゲームでなければ見る部分も少ないので、この程度の雑さでも全然粗が目立たなくなります。ゲームジャムの様な時間が短い開発の場合、時間短縮できるポイントになると思います。
尚、Fogを入れると更にごまかせます。

雑ですが、端を見せない事だけ気を付けています。街から見ると、見える範囲以上に土地が続いているように見えるはずです。
また、適当にやりすぎると街に侵食するので注意。


⑥失敗した話

VRのUIが見えにくくなってしまった

VRでプレイした場合、左側に設置した距離メーターが見えにくくなってしまい、「一旦大きく右を向いてUIを右に動かし、眼球だけ左を見てメーターを見る」という動作が必要になってしまったので、ちょっと不便に感じています。これはマルチプラットフォームゲームでは度々問題になる要素ですので、もう少し意識してUIを作成すれば良かったなと反省しています。

写真にも写ってしまうのはどうしようもないので
こちらはclusterのアップデートに期待しましょう

ジャンプ中ちょっと暇になってしまう

ゲーム後半はジャンプ力も高くなるのですが、ジャンプ力が高すぎて着地まで時間がかかってしまい、間違えてジャンプしてしまった際のペナルティが大きすぎるなと感じています。

これを書いている内に思ったのですが、宝石の数メートル上に透明の天井を設置するのもよさそうですね。

遺跡の場所が分かりにくい

実は、遺跡のシステム的な位置は道路と遺跡の接地点に設定しているのですが、かなり分かりにくくなってしまったなと反省しています。

この辺りからの距離を計測しています

ゲーム実況配信を見させていただいた所道路から外れて計測されていたのが目に留まったので、本来のエリアから逸れるのを防ぐのと同時に、遺跡の計測開始位置を分かりやすくするために壁を設置しました。

景観を損ねない程度の壁。
シェーダーを書いて「近くに行ったら見える壁」を作っても良かったなと思っています。

これなら、距離を詰めたい場合は先ほどの丸の位置に移動するのが自然になるかと思います。

ゲームは文字だけではなく画面全ての物や音などでプレイヤーに伝えるものなので、見た目とシステム的処理の違いを埋めてあげるのも、ゲーム制作には重要ではないかと思います。

同期関係について

clusterの同期の使用上、オーナー(最初にワールドに入った人)以外弾がヒットしてもポイントが増えないというバグがどうしても多く見られました。

その他にもマルチプレイでの不具合が多く見られたのですが、最終日まで全く気が付きませんでした。こればっかりはソロ参加の弊害ですね…

同期問題は話すと長くなるので省略するのですが、ゲームジャム中はこういった問題で時間を消費する可能性があるので、特にソロ参加の方はマルチプレイ前提ゲームを作る際には気を付けてください。時間のあるゲームジャム前に同期関係の仕様を把握しておくと、失敗がなくなるかもしれません。私は把握してなかったので失敗しました。

小失敗集

①スタート地点の街が大きすぎる
デフォルトのアセットが大きかったので1/2の大きさにしていたのですが、スタート地点に配置している街だけ大きさを変え忘れました。

デカすぎんだろ…

②序盤のゲームバランスの調整

序盤、遠いお題が発生すると到着がかなり遅くなってしまうので、ある程度足を速く設定しました。…が、序盤にもお話した「段々足を速くしてメリハリをつける」調整とはずれてしまったので、ちょっと失敗だったかなと思っています。現在はちょっと遅いかな?くらいの調整アップデートをしています。

⑦おまけ

ラピッドライナーの地図

全体マップの公開です。スコアアタックをしたい方は、ざっくりどこに何があるのかを把握しておくとかなり有利に立ち回れることでしょう。青の逆方面は緑、赤の逆方面は黄色とだけ覚えておいても、移動が楽になるはずです。

時間が経つにつれマップが広がり、後半にはジャンプ力が上がって建物上の宝石にもアクセス出来るようになります。

制作時は均等に置いたと思ってたのですけどね…

イースターエッグ的な

おまけ要素として、最近のアップデートで隠し要素を1つだけ街の中に隠しました。見つけても嬉しい事はあまりありませんが、twitter等で写真を挙げていただけると私が喜びます。

最後に

ラピッドライナーは、今までの作品と比べても「何回も遊べて、初心者でも上級者でも楽しいゲーム」に仕上げられたのではないかなと思います。新しい挑戦もたくさんできましたし、とても満足のいく作品に仕上がりました。

ゲームジャム後にはマルチプレイバグ解消版としてアップデートを行いました。複数人の場合は的の取り合いが発生しソロでは味わえない楽しさがあるので、是非仲の良い人とも遊んでみてください。もちろんソロも引き続き楽しいです。

スコアに関しては、400点を超えたら一人前、600点を超えたら凄い!という感じです。ちなみに、700点超えの方も確認しているので、ぜひ挑戦してみてください。


今回は思いついた事をとにかく書くというスタンスで記事を書いてみました。だらだらと続けてしまいすみません…

その代わり幅広い方面から語れたので、一つでも参考になる話題があれば幸いです。

最近noteを書いていなく、書ける話題はあれども何を書いていいのかわからない状態です…何か聞きたい話題があればぜひ私のtwitter,質問箱まで連絡いただければ、書ける範囲で書きたいと思います!

「Cluster Creator #1 Advent Calendar 2022」は本日4日目。明日(5日目)はSha-la /歌詠しゃらさんの記事です!

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