【第8回】Unityで設備配置システムを実装|コンベアを置く・回転する・削除する

機械設計×ゲーム

前回の記事では、12×8のグリッドをUnity上に表示し、
セルをクリックして選択できるところまで進めました。

最初はただの96マス。
そこから、クリックするとセルが黄色になる。
別のセルをクリックすると選択が切り替わる。

Consoleには、
Selected GridCell: (3,5)
のように座標まで表示される。

ここまでで、ようやく「プレイヤーが触れる盤面」になりました。

そして今回、ついに次のSTEPへ進みます。

グリッドの上にコンベアを置く

これができれば、プレイヤー自身が設備を配置して、
工場ラインを組み立てることができます。

今回のゲームにとって、かなり大きな一歩です。


次に作るのは「コンベア」だけではなかった


前回の最後では、次はグリッド上にコンベアを置く、という話をしていました。

なので最初は、「コンベアを配置する機能」を作ればいいと思っていました。

ところがChatGPTから、

ChatGPT
ChatGPT

コンベアだけに使える配置機能を作るより、
最初に「ブロック配置システム」を作った方が後で楽です。

という提案がありました。

確かに、今後置きたい設備はコンベアだけではありません。

  • ストッパ
  • 加工機
  • センサ
  • 分岐
  • 合流設備

など、いろいろ増えていく予定です。

それなのに、設備ごとに別々の配置方法を作っていたら、
後から大変になりそうです。

そこでSTEP3では、

コンベアを第一号として、今後いろいろな設備を置ける共通の仕組みを作る

ことにしました。

このあたりから、単に目の前の機能を作るだけではなく、
あとから拡張しやすい構造を考えるようになってきます。


CodexにSTEP3をお願いしてみる

前回までと同じく、ChatGPTにCodex用の指示文を作ってもらい、Codexへ渡します。

今回の目的は、

「ブロック配置システムを作ること」

です。

必要な機能は、

  • 左パネルに「コンベア」ボタンを表示
  • コンベアを選択できる
  • セルをクリックするとコンベアを配置
  • 配置済みセルには重ねて置けない
  • Rキーで90°回転
  • 右クリックで削除
  • コンベアには進行方向が分かる矢印を表示

というもの。

そして、今回も重要なのが、まだワークは動かさないという点です。
つい、「コンベアを置いたなら、もう荷物を流してみたい」と思ってしまいます。

でも、まずは配置システムだけを完成させる。

ここでも、1STEP=1つの目的という進め方を続けます。


Codexから、いきなり大量のファイル名が返ってきた

実装が終わると、Codexからこんな報告が返ってきました。

追加されたファイルには、

  • BlockBase.cs
  • ConveyorBlock.cs
  • BlockPlacementController.cs
  • BlockPaletteUI.cs

などが並んでいます。

さらに、

  • GridCell.cs
  • GridSelectionController.cs
  • SampleScene.unity

も変更したとのこと。

正直な感想は、

はじめ
はじめ

「急に知らないファイルがめちゃくちゃ増えた……」

  • BlockBase.cs?
  • BlockPlacementController.cs?
  • BlockPaletteUI.cs?

名前を見ても、何となくしか分かりません。

ただ、この頃には、コードそのものを全部理解しようとはあまり思わなくなっていました。

それよりも重要なのは、

「自分がお願いした機能が、ちゃんと動くか」

です。

そこでChatGPTに、

上記を要約して、何をすればいいか教えて

とそのまま投げました。


自分がやることは5つだけだった


Codexの説明はかなり長かったのですが、ChatGPTに整理してもらうと、
自分が確認することはたった5つでした。

1. UnityをPlayする

まずゲームを再生。


2. 「コンベア」ボタンを押す

画面左側に、コンベアというボタンが追加されています。
これを押すと、ボタンが緑色になる。
つまり、コンベア配置モードに入ったということです。


3. グリッドをクリックしてコンベアを置く

配置モードの状態で、好きなセルをクリック。
すると、グリッド上に、緑色の矢印付きブロックが表示されます。

これが今回のコンベアです。

見た目はまだかなりシンプル。
ただの緑色の正方形に、白い矢印。

でも、この瞬間、かなりゲームっぽくなりました。


初めて「自分で装置を置いた」

これまでは、Codexが作ったものを、
Unity上で確認するだけでした。

グリッドが表示される。
セルをクリックできる。
確かに操作はしていました。

でも今回、初めて、
自分の好きな場所に設備を配置できる
ようになりました。

クリックする。
コンベアが置かれる。
また別のマスをクリックする。

コンベアが並んでいく。

例えば、

⇨ ⇨ ⇨ ⇨

と4つ並べるだけでも、

なんとなく、工場の搬送ラインに見えてきます。

四角形を1つ右に動かしていた頃とは、かなり違います。


Rキーでコンベアを回転できる

次に確認するのが、回転機能です。
配置したコンベアを選択し、Rキーを押します。

すると、矢印が90°ずつ回転します。

右向き。

↓

下向き。

↓

左向き。

↓

上向き。

という感じです。

これだけでも、グリッドゲームとの相性がかなり良いです。

コンベアを好きな方向へ向けられるので、直線だけではなく、
曲がるラインも作れそうです。

まだ実際にワークは流れていませんが、頭の中では、

「ここで右へ曲げて……」
「このラインを加工機につないで……」

少しずつゲームの完成形を想像できるようになってきました。


右クリックで削除できる

もちろん、置いたコンベアを間違えることもあります。

そこで、配置済みのセルを右クリックすると、
コンベアが削除されるようになりました。

  • 置く
  • 回す
  • 消す

この3つができるだけで、かなり操作らしくなります。

機械設計でも、構想段階では、
置いて、位置を変えて、向きを変えて、いらなければ消す。

ということを何度も繰り返します。

ゲーム上でも、まさに同じことをやっています。


同じマスに2個置けないようにする

もう一つ大事なのが、重複配置の防止です。
一度コンベアを置いたセルを、もう一度クリックしてみます。

もし、同じ場所にコンベアが何個も重なってしまったら、
後々かなり困ります。

そこで今回、各セルが
「このマスにはすでにブロックがある」
という情報を持つようになりました。

そのため、配置済みのセルには、
新しいコンベアを置けません。

見た目には地味ですが、
ゲームのルールとしてはかなり重要です。


STEP3の合格条件

今回も、やることは明確です。

確認するのは、次の5つ。

  1. コンベアを選択できる
  2. セルに配置できる
  3. 同じセルに重複配置できない
  4. Rキーで90°回転できる
  5. 右クリックで削除できる

これが全部できれば、STEP3合格。

プログラムが何行あるのか。
どんなクラス構造なのか。

正直、この時点ではほとんど分かっていません。

でも、要求した機能が全部動けば、まずはOK。
ここでも、結果を確認して次へ進むというスタイルです。


「BlockBase」という考え方ができた

今回のCodex実装で、後々かなり重要になる仕組みもできました。

それが、BlockBaseです。

名前だけ聞くと難しそうですが、

ざっくり言えば、

コンベアやストッパなど、
ゲーム内に置く設備が共通で持つ基本情報

のようなものです。

例えば、

  • どのマスにいるか
  • どの方向を向いているか
  • 何の設備なのか
  • 有効なのか
  • 90°回転する

といった情報です。

今はコンベアしかありません。

でも、この共通部分を作っておけば、
今後ストッパや加工機を追加するときにも、
同じ仕組みを使えます。

私はまだコードを理解していませんでしたが、
「今後の設備追加を楽にする土台をCodexが作っている」
ということは何となく分かりました。


コンベアの見た目は、まだ緑色の四角で十分

今回作ったコンベアは、リアルなベルトコンベアではありません。

緑色の正方形。

その中に、白い矢印。

ただそれだけです。

でも、この時点ではそれで十分です。
以前から、「まずはMVPを作る」という方針で進めています。

コンベアのローラを描く。
ベルトをアニメーションさせる。
脚を付ける。
立体的にする。

そういった見た目の作り込みは、後回しです。

今確認したいのは、
プレイヤーが設備を配置してラインを作ることが楽しいかどうか。

なので、矢印付きの四角でも、目的は十分果たせます。


ここまでくると、かなり「ゲーム」っぽい

STEP1では、12×8のマス目が出ただけ。

STEP2では、クリックしたマスが黄色になっただけ。

そしてSTEP3では、ついに、
マスの上へコンベアを置けるようになりました。

  • 並べる
  • 回転する
  • 消す
  • 別の形に並べ直す

まだワークは動いていません。

それでも、自分でグリッド上に矢印を並べていると、
かなりゲームを作っている感じがします。

特に、「プレイヤーがゲーム内で装置を組み立てる」という、
今回のゲームの中心となる操作が、初めて形になりました。


最初に「ブロック配置システム」を作って正解だった

今回、コンベアだけを直接作るのではなく、

共通のブロック配置システム

を先に作りました。

これによって、今後は、
同じ仕組みの上に、

  • ストッパ
  • 加工機
  • センサ
  • スタート
  • ゴール

などを追加していけます。

一度、「設備をグリッドに置く仕組み」さえできれば、
あとは設備ごとの機能を追加していけばいい。

この考え方は、ゲーム制作初心者の自分にも、
かなり分かりやすいものでした。


STEP方式がさらに分かりやすくなってきた

今回の開発でも、今までのやり方がそのまま使えました。

  1. 仕様を決める。
  2. ChatGPTにCodexへの指示文を作ってもらう。
  3. Codexに実装してもらう。
  4. Unityで確認する。
  5. 合格条件をチェックする。
  6. 問題があれば、
  7. その症状をChatGPTに相談する。
  8. 問題がなければ、次のSTEPへ。

この繰り返しです。

自分がコードを書けなくても、

「何を確認すれば合格なのか」

さえ分かれば、かなり開発を進められます。


でも、まだコンベアは何も運んでいない

ここまで聞くと、コンベアが完成したように思えます。
でも実際には、まだ、ただの矢印付きブロックです。

ワークを運ぶ機能はありません。
コンベアの上に荷物を置いても、何も起きません。

つまり、見た目だけコンベア。
ここから次に必要なのが、ワークを実際に流すことです。

これができれば、配置した矢印の方向へ、
ワークがスーッと移動していく。

前回こだわった、
「グリッドゲームだけど、ワークは滑らかに動かしたい」
という考え方も、いよいよ実装することになります。


次回は、コンベアの上をワークが流れ始める

今回までで、プレイヤーは、

  • コンベアを選ぶ
  • 好きなマスに置く
  • 向きを変える
  • 不要なら消す

という操作ができるようになりました。

ゲームの盤面を、自分で作れるようになったわけです。

次は、そこへ実際にワークを流します。
スタートからワークを生成して、
配置したコンベアの方向へ移動させる。

ここまでできれば、ただの盤面が、
「動く工場ライン」へ変わります。

次回は、

【第9回】コンベアの上をワークが流れるようにしてみた

というところから、さらにゲームらしい動きを作っていきます。

コメント

タイトルとURLをコピーしました