【Unity】横スクロール型のシューティングゲームをサークルで制作した話

# 目次
[1. はじめに](#1-はじめに)
[2. 作ったゲームについて](#2-作ったゲームについて)
[3. 開発の流れ](#3-開発の流れ)
[4. プロジェクトを通して学んだこと](#4-プロジェクトを通して学んだこと)

# 1. はじめに
このゲームは私が人生で初めて開発したアプリになります。
制作したのはもう2年も前の話ですが、過去に開発したアプリの記録を残そうと思ってこの記事を書きました。

# 2. 作ったゲームについて
[2-1 ゲームの概要](#2-1-ゲームの概要)
[2-2 ゲームの3つの特徴](#2-2-ゲームの3つの特徴)
[2-3 ゲームの画面](#2-3-ゲームの画面)
[2-4 ゲームの基本操作](#2-4-ゲームの基本操作)

## 2-1 ゲームの概要
作品タイトルは「メカ少女シューティング」で、横スクロール型のシューティングゲームです。少女の姿をしたキャラクターが銃を持って敵を倒していくゲームで、各ステージの最後にはラスボスの敵が配置されています。
![Screenshot 2023_09_26 17_13_28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3330232/940ba456-e119-29df-f260-dc079eba1bf0.png)

## 2-2 ゲームの3つの特徴
**1. アイテムを使用して武器を強化**
敵を倒すと一定確率で武器の強化アイテムが手に入ります。
武器を強化することで、今まではクリアが難しかったステージがクリアできるようになります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3330232/82484c96-1195-c1d2-0259-caf736f41772.png" width="100" /> <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3330232/3a4abf75-b2a9-cebe-d152-c31a7d33b9ec.png" width="100" /> <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3330232/d7fe19b6-f945-ce96-aa4e-9298e87eebe1.png" width="100" /> <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3330232/59c2fcf4-383e-7c18-eb57-a24097afcaaa.png" width="100" />

**2. 豊富な敵キャラクター**
実装されている敵の種類はモブキャラだけで10体以上！それぞれ固有の攻撃方法を持っています。
![MekashojoShooting 2023_05_21 6_49_07 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3330232/819746e4-6ce6-a50e-821b-d171e83be3aa.png)

**3. 豊富な種類の武器**
メイン武器、サブ武器、必殺技(ボム)の3種類の攻撃方法に加えて、防御(シールド)を使用することができます。
メイン武器とサブ武器は複数の武器の中からそれぞれ1つ選ぶことができます。![メカ少女 2023_09_26 17_16_44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3330232/c3a5c85b-5ff3-a9a8-f2fa-7f59eb98cf23.png)

## 2-3 ゲームの画面
- スタート画面
NewGameを押すと新規データで、Continueを押すと前回遊んだ続きからプレイできます。
How To Playを押すと遊び方や操作方法が確認できます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3330232/904d724f-d225-69f3-a1d2-b9d96af31bf2.png" width="300" />

- メニュー画面
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3330232/15d36e43-2446-1137-7d06-729202f04d7a.png" width="300" />

- 装備選択画面
バトルで使用する武器を選択・強化できます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3330232/9ce0f337-7ed1-ed1d-4de2-e413b41fe371.png" width="400" />

- ステージ選択画面
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3330232/cbc8e54a-3496-5f98-91a6-ef214772ca75.png" width=300 />

- ゲーム画面
![Screenshot 2023_09_26 17_13_28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3330232/1f9b4619-bf18-abfe-9c9d-b7d86f03b862.png)


## 2-4 ゲームの基本操作
| 名称 | 操作 |
| ---- | ---- |
|上下左右の移動|W + A + S + D|
|武器の使用|左クリック|
|必殺技(ボム)|スペース|
|防御(シールド)|右クリック(長押し)|
|メイン武器とサブ武器の切り替え|マウスホイール|
|一時停止|Escキー|


# 3. 開発の流れ
2021年5月〜11月で要件定義・開発を行いました。

|時期|内容|
|--|--|
|5月|要件定義・仕様書作成|
|6月・7月|開発|
|8月|大規模なリファクタリング|
|9月〜10月|開発|
|11月|最終調整|

プログラマ・グラフィック・音担当の合計10人ほどのチームで開発を行い、私はこのチームのチームリーダーを努めました。具体的には、会議での司会進行・仕様書作成・リファクタリング・コア部分の作成を担当しました。

# 4. プロジェクトを通して学んだこと
**1. オブジェクト指向・MVCの設計**
私はこのゲームを開発した頃まだまだ未熟で、1000行以上ある、いわゆる神クラスを作ってしまったり、Viewとロジックを密結合にしたりしてしまいました。

見かねた上級生の先輩に、コードが読みにくいと指摘され、クラスが密結合だと良くないということだとか、テストが書きやすいコードの書き方だとかを教えてもらい、8月に大規模なリファクタを行い、ロジックとViewが分離されたコードへと修正しました。

この経験のおかげで、RailsのMVCの考え方をすんなり受け入れることができ、この先のプログラミングの勉強にとても役に立ちました。

**2. チーム開発の基礎**
当時私はGitやGithubの使い方を全く知りませんでした。
どれくらい知らなかったかと言うと、
- コミットの単位
- ブランチの切り方
- PRの切り方
- コードレビューの仕方
- Issueの割り振り方

という本当に基本的なことすら分かっていませんでした。

この開発を通して、上級生の人たちにGitの使い方を教えてもらった経験は、この先アルバイトや個人開発でGitを使う際にとても役に立ちました。