【GGJ16】今回作ろうと思ったものについて「絶対音感乙女サモナー」

#テーマ
GlobalGameJam2016 dwango会場team6にて

今回のGGJ2016のテーマは[Ritual]
日本語だと儀式という感じ

![IMG_3881.JPG](https://qiita-image-store.s3.amazonaws.com/0/96808/94d9d6b0-1bc8-1e4b-fbe1-a927a0b08d38.jpeg)


#アイデア出し

今回は７名もいるチーム。
久しぶりに大人数のチームだった。

で、アイデア出しが始まった。赴くままにいろいろだしてみる。
召喚、かわいい女の子がでてくる、音ゲー
とかとか

いろいろでてきて、で、みんなでラフなスケッチを描いてみたところ

![IMG_3879.jpg](https://qiita-image-store.s3.amazonaws.com/0/96808/7b182b42-4e06-091c-51e0-440a3d5b808e.jpeg)

## ビルダー系
[ドラゴンクエストビルダーズ](http://www.dragonquest.jp/builders/)がでていたので、
なにかビルドして評価されると楽しいよね。

魔法陣を作成して綺麗に素早く作れたら
「俊足の几帳面な魔法陣」とか
まったりてきとうに作ったら
「のどかなきまぐれ魔法陣」とか
評価してくれると楽しそう。
（この機能は未実装）


##PlayGroundというアプリ
PlayGroundというアプリが面白いという話
http://www.getplayground.com/

で、これが画面をなぞると面白い音が生まれてくるのです。

なぞるだけで音がうまれてくる。
なぞると音（乙女）がうまれてくる
乙女サモナー

##作っている途中の感じ

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/7cab7acb-8f83-8621-ee75-1910a8436799.png)

右上からドラッグして左側に魔法陣を作る。
（制限なくて毛糸玉っぽくなってる）

右下にはデバッグ画面の[MusicEngine](https://github.com/geekdrums/MusicEngineForADX)の小節などが表示されている。

##試遊会時の雰囲気
![image](https://qiita-image-store.s3.amazonaws.com/0/96808/a4aab317-b756-d829-6ab3-8822cc39e7b6.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/038fc6ac-ba47-6c13-a100-74b1b02022ac.png)

##絶対音感乙女サモナー

できたのがこれ
動画：
[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/HHPGS_zO-qs/0.jpg)](https://www.youtube.com/watch?v=HHPGS_zO-qs)
https://www.youtube.com/watch?v=HHPGS_zO-qs

魔法陣を作って、

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/ebb3d2c7-a502-9a17-1da3-239d90a351fb.png)

なぞって、

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/c05e557a-747d-338c-773a-e7bdfc495f95.png)

擦って、

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/86f214c6-cbf9-bad1-5e40-652344f4b8ed.png)


乙女を召喚
![image](https://qiita-image-store.s3.amazonaws.com/0/96808/58e48e55-ba5c-737d-8043-430428f240e1.png)
（ガチャ）するゲーム。

召喚した乙女はコレクションに溜まる。

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/90179e30-a602-06c9-f444-cd14882744e9.png)

なんと総数32以上

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/34396645-a420-930f-5b37-b29a7e48021a.png)


コレクションを埋めたくで何度もリプレイしたくなる。

#サウンドのこだわったところ

##よくしゃべる
AITalk4 声の職人がGGJ期間中使えたので、いろいろしゃべってもらった。

タイトルは３分以上喋り続けます。
![image](https://qiita-image-store.s3.amazonaws.com/0/96808/31681c41-6de0-72f9-94dd-d1c3ddc49b6a.png)

感情機能が搭載されていて、喜びのパラメータがあって
「サモナー！！！」は少し喜び目にしてあります。

って、後で気がついたけど
![IMG_3894.JPG](https://qiita-image-store.s3.amazonaws.com/0/96808/0feb7259-2a20-ac1f-92a8-b568d0e2778b.jpeg)

葵さんと茜さんを勘違いしていて
葵さんは標準語だったのですね。
関西弁風のなにかをしゃべっておられます。

ニコニコ動画
http://www.nicovideo.jp/watch/sm28122562
とかでよくゲーム実況とかしてますね。

##FMSynth
操作方法によって、まさに動的にいろんな音が鳴ると面白いかと思い
FM音源の音を生成して音をならしてみたかった。
最近Unityで作ってみていた
http://www.nicovideo.jp/watch/sm28062447
ので、無理して入れてみたけど、まだまだ制御が難しく（生成される音が暴れる・・・）
これは、結構負荷が高くて失敗。
（iOS版には含めていない）

##配置の時の音

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/8447cb64-2e70-e423-0aa0-b01d93c70df1.png)

分割された円に配置する時、
「ひょい」っと鳴って、「カチカチ」クリックして、「カシャ」と置くようにしてみた。
細かく音が鳴ると操作していて気持ち良い。

[MusicEngine](https://github.com/geekdrums/MusicEngineForADX)の力で、Quantizeプレイ（音楽のタイミングに合わせた再生）がかかっている。（つもりだったが諸事情により最終版ではかかってない）

##なぞる音
頂点だけ音が鳴るけど、本当は線の上も音だしたかった。
あと、属性が５種類あるので、音を切り替えたかった。

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/aa10aa17-50ea-d0a2-4303-2eaff4f953ab.png)

今回は、なぞるというか擦る間隔で、コンボシーケンシャルが発動するようにADX2LEの機能を使ってみた。
コンボ発動時は、音程が少しづつ上がって、
最大コンボ時には「サモナー」っと叫んでくれる。

もちろん、ボイスは重ならないようにプライオリティ制御してある。（ので解説中はサモナーって叫ばない）
![image](https://qiita-image-store.s3.amazonaws.com/0/96808/02f1753d-f802-b3e3-4b7f-2d1a938824cc.png)

サモナーボイスも先着優先なので、多重リクエストが来てもかぶらない。
といった細かい制御はADX2LEのツール側で全部設定してある。

##エフェクトはあっさりと

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/c0dec36b-3870-79fd-c864-d26ec0c77e2a.png)

今回はREACT的ダッキングは使わず、声に印象深くするためにリバーブとディストーションを薄くかけてある。
で、BGMと混ざった音に軽くリミッターがかかるようにしてある。

##BGMや効果音はLogicXで作成
![image](https://qiita-image-store.s3.amazonaws.com/0/96808/1635fdeb-e8d5-a6c9-d02d-80dc6049de2c.png)


##BGM制御（ビートタイミング切り替え）とボイス制御


![image](https://qiita-image-store.s3.amazonaws.com/0/96808/58d45a4f-b807-5b5d-d29f-43a3c6e6cf6d.png)

タイトルからゲームのイントロへ
魔法陣作成時と演奏時では少しアレンジが変わっていて、後半はフルートやトランペットが入ってくる。
曲の終わりタイミングでゲームもリザルトへ移行する。（これはMusicEngine経由でセクション切り替わり時のブロック名判定）
タイトルへ戻る時にコーダ部分を演奏するのをすべて
小節単位で切り替わるようにブロック分割している。

また、MusicEngineも利用してビートに合わせた演出（右下のキャラが拡大縮小するような）も扱っている。

イントロ部分で、ボイス説明を開始して、重なりそうな部分は、後の音を少し高めのプライオリティを設定している。
例えば、タイトルの説明より、ゲーム開始の「ほな、はじめよか」とかは少し高め。
ちなみにシャッフル再生で、ゲーム開始ボイスも何パターンか用意されている。

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/2194851b-8cc6-ff0e-c400-e29879f96590.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/ceaadc23-8da1-6d33-35ac-44fe11c63103.png)

ちなみにAITalkの出力波形はとても小さいので、ADX2のボリュームに直接数字入力で5倍の音量にしてあったりする。（波形編集作業削減）

##ガベコレなのかUnityEngineの振る舞いなのか・・・
トラブルがあって、リザルトSceneに移行するとMusicEngineが何かの理由で止まってしまう。音は鳴っているけど、MusicEngineコンポーネントの処理が止まってしまう理由が思い当たらず（おそらくStaticなメンバーの処理とかネイティブなADX2LEのコンポーネントとか絡んでいたりとか。タイトルからゲームは生きてるけど、ゲームからリザルトにとシーンを２個またぐと解放されてしまうイメージ。ガベコレが働かずにかろうじて生きているような感じ。とにかく動作が怪しい。）
ゲームジャム中は、タイトルシーンで、再度初期化し直すことで、何度もプレイできるように誤魔化した。

ゲームジャム中とにかくシーン移行のタイミングで止まってしまうので、止まらないようにDontDestroy化した。（これがリリース3時間前にやってしまったこと）で、マルチシーンなのにDontDestroyで、もうその時はわけわからない実装で凌いでいた

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/5014d9c4-431a-9d64-5a92-5149af2a8569.png)

##マルチシーンに対応してサウンドセットアップシーンを作った

MusicEngineをDontDestroy化して、シーンをまたいで生き続けるようにした。
（ガベコレが起こらないようにしているだけかもだけど）
で、動作は意図通りになるのだけど、DontDestroy系は階層化してまとめたりできないみたいで、プレファブが増えてしまって困っていた。

各シーンにサウンド系のオブジェクトをそれぞれプレファブ化して配置するけどどれか一つでも配置忘れると音がNGになるし・・・。

ゲームジャム中は未対応だったけどiOS版作るにあたり整理して、
「SoundSetupScene」ってのを作ってセットアップするようにした。

各シーンにはSoundSetupSceneをロードするだけのオブジェクトSoundSetupを一つ追加しておくだけ。

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/e86a605d-f949-c230-2512-5947304c7edb.png)

中身はロードしてなかったらロードするだけ。

``` SoundSetup.cs
using UnityEngine;
using System.Collections;

public class SoundSetup : MonoBehaviour {

	void Awake () {
        UnityEngine.SceneManagement.SceneManager.LoadScene("SoundSetupScene",UnityEngine.SceneManagement.LoadSceneMode.Additive);
	}
}
```

SoundSetupSceneのシーンにはこんな感じで、
Sound関連のコンポーネントやゲームオブジェクトがいろいろ入ってる。

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/3980af03-469b-72e0-2964-f9fb3f23a3bf.png)

音で発動するパーティクルエフェクトや使わなくなったFM音源とかも入ってる。
（あと、今回トラブルの元となったSoundManagerのためのEventSystemも）

・・・って、あれ、ここまでしたらDontDestroyじゃなくてもいいのかな。

##今回はサウンドマネージャ経由にして再生とブロック制御をおこなった
SoundManager.cs
![image](https://qiita-image-store.s3.amazonaws.com/0/96808/a88ffe34-b371-d4be-88c9-1eefc4f41e8b.png)


#今回はテンパってしまった
リリース3時間ほど前に、突然サウンドシステムを変更したのが裏目にでて、ゲームの進行ができないバグを埋め込んでしまった。

これは、SoundManagerがデバッグ用に管理していたCanvasとTextがあったのだが、
EventSystemごとプレファブ化してしまったために、シーン切り替えで破棄されず、シーンが切り替わるとボタン操作やドラッグ操作が一切効かなくなるという致命的なバグ。
（おそらく前のシーンのEventSystem（破棄してるけどガベコレされないみたいな）の関数とかを参照しているとかわけわからん状態になっていたりとか））

なんとか発表までに間に合わせて動くようにはした。（いろいろ問題あったが、動画版はそのバージョン）

#iOS版
ちなみに、iOSでもリリース済みなので、遊んでもらえると嬉しいです。
https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=1080371932&mt=8

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/c2d49cc8-31a1-9077-5c53-4e90c820f819.png)

こちらは、当日間に合わなかった要素やバグ修正済み。

当日できたMac,Win版はこちらのGGJサイトから遊べます。
http://globalgamejam.org/2016/games/ggj2016-team6

超速でリリース(2/5くらい）できた。

##UnityのResourcesフォルダに注意



#反省点
・ゲームの設計の中で一部でも「ふわっと」したところがあると、そこからほころびが始まる。
・リリース３時間前にシステムの根底は弄らない。（甘かった）
・人数多いけどコミュニケーションは大事。（テンパって受け入れられなかった）
・余裕をもって。

#良かった点
・いろんなタイプの人がいた
・GitやSourcetreeの使い方が大分よく分かった（複数人同時作業時の問題発生時の解決方法とか）
　（アカデミックだと無料でプライベートリポジトリが作れるとか、いいな）
・ADX2LEの使い方が分かった。
・リアルタイムFM音源はまだまだ改善の余地ありということが分かった。
・Slackの使い方が少し分かった

#失敗を恐れるよりも、参加してチャレンジできる場
どんな経験をしても３日で終わるので、ダメージも少なくすむ。理想のゲーム作成のロールプレイしている感じ。
まぁ、失敗してもいいのがゲームジャム。
今回も盛大に失敗したので、今後の仕事や次回のジャムに活かしたいと思います。