メガマウスカップ

Git Breakers

https://github.com/NakaAwjr/GitBreaker

GitHub

C#

Unity

エンジニア達よ、Gitの迷宮へ挑戦し通信協力でGitをぶっ壊せ!

ミドルビレッジ

林壱仁_++志井++

sirin1001

推しアイデア

ランダムで部屋を作るアルゴリズムが実装されてたりするところ! 協力してボスを倒しにいくところ!

作った背景

ローグライクゲームが好きなんです! それ以上ない!

推し技術

UniRx - イベント DOTween - アニメーション Photon - 通信

プロジェクト詳細

ゲームについて

GitBreakers

概要

ローグライク通信協力ゲーム 毎回バグって形が変わる迷宮を最大4人の仲間とGitをぶっ壊してなんとかするゲーム さて何"メガ"バイト壊せるか!?

デモ動画

フォルダ管理について

Assets ├── DownLoadAssets │   ├── DOTween │   ├── Photon │   └── UniRx └── MyAssets ├── Commmons │   ├── Animation │   ├── アニメーション入れるとこ │   ├── Fonts │   ├── フォント入れるとこ │  ├── Musics │   │ ├── SEs │   │ ├── 効果音を入れるとこ │   │ ├── BGMs │   │ └── 音楽入れるところ │   ├── 曲入れるとこ │   ├── Prefabs │   ├── プレファブ入れるとこ │   ├── Scripts │   ├── コード入れるとこ │   ├── Sprites │   ├── 画像入れるとこ │   └── 同階層の他のフォルダの中身も大体こんな感じです    ├── Develops │   └── 個人の開発シーンの置き場    ├── Field    ├── Result    └── Title

今回シーンごとにScriptやPrefabを管理しています。 DownLoadAssetsにはDoTweenやUniRxなどの導入するだけで使えるもの、大量の画像ファイルなどがあるものを置いています。 MyAssetsには実際に開発するときにいじるものを置いています。

設計

クラス図

タイトル&マッチング画面 image

Fieldシーン GitBreakers

マップランダム生成アルゴリズム

image こんなところにくそでかフローチャートが!!!! 迷路作るノリでマップを自動生成するアルゴリズムです。 移動していきながら、部屋や通路を作ります。

使用技術

image

UniRx

イベント管理を行うことのできるライブラリです。 クラスの変数が変更された場合、その変更の通知を受け取ってなんらかの処理を行うことができます。簡単に言えば依存性の逆転が行えたりします。

例えば、変数を変更するクラスAとその変更されたことによって処理を行うクラスBがあったとします。

UniRxなし

クラスAは自身の変数を変更したときにクラスBを参照して、クラスBのメソッドを発火する必要があります。 この時クラスBはクラスAのことを知る必要はありません。

image

UniRxあり

クラスAが自身の変数を変更したという通知をクラスBが受け取ることでクラスBが自身の処理を発火させます。 この時クラスAはクラスBのことを知る必要はありません。

image

例の場合、変更を行う、変更から処理を行うの関係が1 : 1の関係なので、いまいちピンと来ないかも知れませんが、変更から処理を行うクラスがもしも複数個あった場合、変更を行うクラスはそれだけたくさんのクラスを参照することになります。

image

依存性の逆転を行うことで、それぞれの変更から処理を行うクラスは変更を行うクラス1つを参照すれば良いため、擬似的に1 : 1の関係を生み出すことができます。

image

DoTween

高品質なアニメーションを行うことのできるライブラリです。 例えば三角形を上に移動させたい時は以下のコードを1行書くだけで動画のように動きます。

this.gameObject.transform.DOMove(Vector3.up * 2, 3);

image

動きながら回転は以下のように

this.gameObject.transform.DOMove(Vector3.up * 2, 3); this.gameObject.transform.DORotate(new Vector3(0, 0, 360), 3, RotateMode.FastBeyond360);

image

ちょっと力を貯めて

this.gameObject.transform.DOMove(Vector3.up * 2, 3).SetEase(Ease.InBack); this.gameObject.transform.DORotate(new Vector3(0, 0, 360), 3, RotateMode.FastBeyond360).SetEase(Ease.InBack);

image

といった具合に簡単にアニメーションを行うことができます。

Photon

マルチゲームを作る時に便利なライブラリです。 通信が死ぬほど楽になります。 マッチング処理も非常に簡単で

PhotonNetwork.JoinOrCreateRoom("Room", new RoomOptions(), TypedLobby.Default);

上記コードを実行すると"Room"と言う部屋に参加する、存在しなければ作る、という処理が行えます。 これだけでUnity上では通信を行うことができます。

乾燥した乾燥

インゲームの部分はふんわりクラス図書いて設計もどきをしたことで開発がかなりスムーズに行きました。 クラス同士の関係が見えやすいのはいいですね。

メンバー

中村 - 企画、UI、デザイン 倉地 - マップランダム生成アルゴリズムの作成 林 - フィールドシーンの機能実装

ミドルビレッジ

@cb5aff60fcebce0a