昔ながらのゲームをUnityで作る時に困ったこと

先日、UnityRoomで勉強用に作成した倉庫番のゲームを公開しました。

unityroom.com

元々はこちらの書籍の内容をUnityで作ってみようと思って始めたのですが、

C++で書かれていたものをUnityに置き換える際に、少し手間取ったところがありましたので、

その内容をメモがてら、ブログに書いていきたいと思います😄

詰まった点① Debug.Logが見にくい

ゲームを作るうえで必要になるのが、入力、更新、描画です。

描画部分を作る際、最も簡単なのがCLI上で表示するやり方。

例えば、ステージデータはCLIだと下記のように表示できます。

########
# .. p #
# oo   #
#      #
#      #
########

ところが、上の表示をUnityのDebug.Logでやろうとすると、

f:id:cacapon:20210917143746p:plain

といった感じにスペースが上手く一文字分にならず、崩れてしまいます。

また、Updateに記載しているせいで、

変更を追っていくのが大変に💦

詰まった点② ステージデータとUnityのオブジェクトの扱い

Unityで実装する際に悩んだことの一つ、

どうやってプレイヤーとオブジェクトとそのほかの要素で分けよう?

といったことでした。


例えば、プレイヤーはステージ上を壁に囲まれた範囲で動けます。

箱を押せますし、ゴール床の上に乗ることも出来ます。

ただ、それをUnityでどう表現すればいいか迷ってしまいました。


ステージ床とプレイヤーを別の次元として扱うか?

でも、そうするとステージデータと分離が出来てしまう…


結局悩んだ結果、元の本を参考に

全ての状態を図で用意することにしました。

こんな感じに

f:id:cacapon:20210917144801p:plain

ちょっと画像が小さいですが、

  • ゴール床
  • プレイヤー
  • 箱(ゴール上)
  • プレイヤー(ゴール上)

とすべての状態の図を用意しておいて、

ステージの状態と画像を紐づけることにすることで解決しました*1


まあ、このままだとアニメーションが出来ないのですが…💦

そこは今後の課題ということにしましょう。

完成した後に困った点 コードがぐちゃぐちゃ

考えながら追加追加で作ったせいか、コードが結構ぐちゃぐちゃに感じてしまいます。

もっとスマートに作れるといいのですが、難しいですね💦


以上になります。

私の知識だと2dのマップ上のものをアニメーションさせる方法が分からないので、

次回作る時はそのあたりを解決出来たらなぁと思います*2😄

それではまた✨

*1:例えば、#の所は1番左の画像を表示する

*2:箱を押したりとか、マップを歩くような動きとか