見出し画像

開発記録:unity1week 「おくる」 9マスで戦います!

2023/12/18~24のUnity 1週間ゲームジャム(unity1week、お題:「おくる」)に参加した四次元ベクトルです。

ゲームはこちらからプレイできます。

前回の制作記録・振り返り記事はこちら

今回の事前準備や目標はこちら


「9マスで戦います!」について

盤面にある9個の数字マスをすべて1回ずつ選んで消し、戦士に攻撃・防御・回復などの指令を送って敵と戦うパズルRPGです。

敵と戦うバトルフェーズ

敵との戦闘(バトルフェーズ)では、9マスを全部選ぶことで攻撃・防御・回復を行います。これが1ターンとなり、その後敵の行動に移ります。

敵を倒した後は、バトルフェーズ同様の盤面操作によってプレイヤー(戦士)を強化できます(強化フェーズ)。

強化フェーズ。盤面の数字や最大HPを大きくしたりできる

バトル・強化のいずれのフェーズも、最後に選んで消したマスと、これから選ぶマスとの位置関係によって行動(攻撃・防御・回復など)が変わります。
このことは画面上部やマス左上に示されています。

マスの選択はマウスクリックだけでなくテンキーにも対応しています。テンキーがあるPCなら、慣れればそちらのほうが楽かもしれません。

今回のゲームは、次の日程で開発しました。

開発記録

事前準備

今回に向けて有給休暇(平日午後)を取得し、独創的なゲームのアイデアをいくつか出しました。
私は仕事でテンキー入力をよく行うので、それをゲームにうまく落とし込めないか考えました。
また、RPGなどバトル系のゲームは楽しい(楽しさの評価が高い傾向にある)ので、これからのゲーム制作に使える簡易的なバトルシステムも作りました。

ちなみに私がunity1weekに初参加する前(2020年秋)に作った以下のゲームには9件の評価が付き、評価した全員が楽しさに満点の5の評価を入れてくれています(本当に楽しめた方しか評価しなかったこともあり、unity1weekと単純比較はできませんが)。
上のバトルシステムもこちらの作品を参考に作りました。

結果、テンキー上のマス移動量によって攻撃・回復などの行動が変わるという案がまとまりました。

1日目(12/18 月)

お題が「おくる」ということで、「送る」「贈る」の言葉の意味を調べ、上記の事前に考えたアイデアを、「パズルで指令を送る」という解釈でそのまま採用しました。すなわち、お題は取って付けたようなもので、完全に「作りたいものを作る」精神で行きました。

お決まりのUnityテンプレートや、UniRxなど定番アセットに加え、上記のバトルシステムも導入しました。
盤面操作や、それをバトルに反映させることを実装しました。
下の図の剣や盾などのアイコンはTextMesh Proの絵文字機能で表示されていますが、この機能を使ったのは私として初めてです。

上記X(Twitter)ポスト(ツイート)の「プレゼントを送り届ける」要素は没になりました……

2日目(12/19 火)

UI本デザインに取り掛かり、強化フェーズやBGMを実装しました。

その後、ゲーム内に遊び方の簡易的な図を表示しました。

こんな感じの図を画面上部に表示

この時点で、ゲームの基本システムはほぼ完成しました。

3日目(12/20 水)

さらに遊びやすくするため、マス目上に攻撃などのアイコンを表示するようにしました。
効果音を付け、ゲームオーバー・クリア画面も実装し、敵出現の演出(以降の戦闘エフェクトはすべてぴぽやさんより)も作りました。

この時点でゲームは8割くらい完成していました。

4日目(12/21 木)

本番用の敵データを作成しました。敵の程よい強さの調整は意外とすぐできました。
背景の雪(パーティクル)やタイトルロゴを実装しました。
タイトル画面はUnity標準機能のTimeline(タイムライン)でアニメーションを付けましたが、初めて触れるだけあってなかなか大変でした。

ゲーム内遊び方説明も書きました。

5日目(12/22 金)

防御・回復・強化フェーズでのパワーアップのエフェクトで見た目をさらに盛りました。

初回のWebGLビルドを行い、unityroomへ投稿しました。

本作はテンキーでも盤面を操作できるため、より快適さを求めてせっかくならとタイトルシーンの音量調整などもすべてテンキーで操作できるようにしました(ゲーム中のリトライ[R]、タイトルに戻る[T]、Xへポスト[X]は除きますが、マウスかキーボードのどちらかで完結するようになりました)。

6日目(12/23 土)

バグ修正を行い、X(Twitter)への画像投稿、unityroom専用ランキングを実装しました。

さらに、敵を攻撃したときの斬撃エフェクトも付けました。

7日目(12/24 日)

最終日にやったことは少しだけでしたが、UIを調整しました。

unityroom用サムネイルのGIFアニメも作りましたが、使い慣れないDavinci Resolve(動画編集ソフト)を使用したので手間と時間が少しかかりました。

力を入れた点

今回は、以下のことに力を入れてみました。

楽しさ

適度なゲームバランス(作者が安定してクリアできる程度で難しすぎない

絵作り

キャラクター素材(ゆるドラシル)

UI(基本的に自作だが、一部Adobe Stockも使用)

背景パーティクル(雪)(Adobe Stock、自作)

戦闘エフェクト(ぴぽや)

操作性

マウスでもテンキーでも操作可能

ゲーム内にこれでもかというほど遊び方説明をアイコン付きで表示し分かりやすく(詳しくは以下の「特に気を配った点」)

特に気を配った点

神は細部に宿る」(細かい部分も重要)の言葉通り、本作では以下のようなことにも配慮しました(一部は上記の「開発記録」と重複するところがあります)。

ゲームを始めるまで

  1. WebGLの仕様上、音を出すために最初画面を一度クリックする必要があるが、そのための専用のシーン(Click to Start)を作成

  2. タイトルシーンにおいて、音量調整などもすべてテンキー操作に対応(紛らわしくならないよう普通のキーボード上の数字キーにも対応)

  3. マスター・効果音の音量調整を行った際に効果音が鳴る(確認のため)

音を出すためにクリックさせる最初のシーン
音量調整もテンキー[0][1][3][4][6][7][9]で操作可能

ゲームを遊びやすくする

ルールをうまく理解してもらうため、以下の工夫を行いました。

  1. マス上に効果をアイコンで表示 (下の1枚目の画像中のA)

  2. マスにカーソルを合わせると、攻撃・回復などの効果の詳細を盤面の下に表示(B)

  3. 盤面上の移動の効果を画面上部に表示(C)

攻略の参考となる要素もあります。

  1. 一度プレイヤーを攻撃した敵の攻撃力が「あと ○」の下に表示される(D)

    • 一度攻撃しないと表示されない仕様が一部プレイヤーには不評でしたが……(参考までに、「詰め将棋系ゲームだと選択→非開示情報の順で出されると不満」という意見がX(Twitter)上にありました)

    • この指摘より、2024/1/1に最初から敵の攻撃力の数値を見られるようになりました!

  2. ゲームオーバー時にヒントを表示して次のプレイに役立てられる(下の2枚目の画像)

バトルのルールを理解してもらうための要素
ゲームオーバー時のヒント。3種類の中からランダムに表示される

システム面

敵のステータスには緩急をつけ、単調にならないように工夫しました。

  1. 途中強くなったり若干弱くなったりを繰り返す

    • 中盤のある敵でやられる方も多かったので、そこをもう少し弱体化すべきだったと反省

  2. 毎ターン少しずつ攻撃する敵もいれば、長めのターン数の後に大ダメージを与える敵もいる

運要素を減らして安定して遊べるようにするため、盤面の数字は以下のように設定しました。

  1. 最大値(レベル)が同じであれば同じ組み合わせ

  2. 位置はランダムなので各数字の自由度(中央のマスは縦横斜めの1マス移動しか行えないが、四隅マスは縦横斜めの2マス移動や桂馬飛びも行えるなど)は異なる

強化フェーズでのレベルアップにおいても工夫しました。

  1. レベル上昇幅が1固定だとレベルアップの恩恵がゲームの後半において小さくなる

  2. マスの数字だと逆にインフレが激しすぎてゲームバランスが崩壊するおそれがある

→マスの数字に関係なく撃破したバトル数にした

また、強化フェーズでひたすらレベルを上げて防御中心に殴り合いすれば楽勝となり、面白くないと考え、以下のシステムも導入しました。

  1. レベルが低く、かつ短いターンでのクリアで好スコアとなるランキング

    • レベルが低いと安定クリアが困難になり、クリアターンも長くなるので、その点のトレードオフが発生

見栄え

本作では魅力的な画面に仕上げるため、以下の工夫も行いました。

  1. 背景やUIは青系の色が多く冷たい印象なので、バトルシーンの一部UIでは背景に少しあるベージュ系の色で暖かみをプラス

  2. ゆるドラシルのゆるっぽいキャラクターを用いているので、英数字は手書き風の丸みのあるフォント、日本語も丸ゴシックを使用して統一感を意識

  3. ゲームオーバー時の画面は若干暗くゲームクリア時の画面は若干明るく

反省点

今回は楽しくて見栄えが良く、かつ遊びやすい過去一番の自信作ができたと思いますが、反省点もあります。

プレイして気づいたこととして、一部敵キャラクターの頭部がUIと重なって見えなくなってしまったところがあります。
顔は重要なので、UIを半透明にしたり位置をずらしたりして顔を見せるべきだったと思います。
2024/1/1のアップデートで敵の攻撃力の数値が攻撃前から見られるようにしましたが、その際見落としていました。
(2024/1/6追記)

「あと4 100000」の表示が敵の頭部に重なっている

外部から見えないところにもあります。私は10回目の参加「ふる」(2023年6月)の時からUniRxなどを使ってスマートなプログラムを書くよう気がけていますが、今回はコールバック地獄(リアクティブスパゲッティコード?)で処理の流れを追いにくくなってしまいました。
UnityでC#の新しいクラスを作ることは若干面倒で時間がかかるので、クラス分けができずに肥大したクラスができたこともあります。

最後に

今回も有給休暇をうまく利用して12連続無遅刻参加を達成しました。
今回はもともとベースのプログラムやアイデアがあった状態でのスタートだったので、5日で本格的なゲームができ上がりました。余った時間でデバッグや、機能の追加・改善、エフェクトで見た目を盛ることなどができ、絵作りなど全体的に過去一番の出来だったと思います。この勢いで初の総合ランキング50位入りも見えてきたかもしれません。

私は仕事においても作業を早めに終わらせるタイプです。今回も月曜~木曜は1日7~8時間くらい作業したせいで睡眠時間が4時間程度になってしまい、規則的な生活リズムが犠牲になりました。

ちょうど1年前の「Re」の時にも同じパズルバトルゲームを作りましたが、

運要素が大きくクリアが難しかったので、今回はその点の調整に気を付けてみました。現時点(2023/12/27)でログインしてプレイしていただいた方の大半はクリアできたようなので、多くの人に楽しめたと思います。

unityroomでのプレイ・評価をよろしくお願いします!


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