Unity 1 Week Game Jam お題「space」

今回も参加しました

Alt text

今回も参加させてもらいましたヽ(=´▽`=)ノ
んで、今回もレポート書いてきます。

つくったゲーム 「ちいさなぎんが」

Alt text

↑画像クリックでプレイできます!
画面をぐるぐる回すことで、銀河系の星をまぜまぜして自分だけの銀河を作ろうってコンセプトです。

レポート

1日目

企画を考えます。
いつものように、ゆう@あんのうんが何案か考えて、それをぽぽたにインプットして、二人の中でピンと来たものを作っていくスタイルで、

その時出てきた案をものすごくざっくり列挙すると

  • 銀河をまぜまぜして、自分だけの銀河を作って、他の人とシェアし合えるゲーム
  • 流れ星に載って宇宙を飛び回るゲーム
  • 空間にうまく逃げ込むゲーム
  • 空間を行き来できる中二病設定の何か
  • 空間を埋めるようなパズルゲーム
  • 時間の隙間的な所を何かするゲーム

と色々あったのですが、銀河をまぜまぜするって所が、ピンと来たのと、新規性があって面白いかもーで合意。

ここから開発開始。
まずは、宇宙を作ったことが無い(と言うか3Dがあんまり…)ので、そこからです。

んで、出来たのが↓ ( 長々と見ると酔うので注意

出来上がったのを動かしてみて、速攻酔いました。

2日目 - 3日目

ごりごり開発を進めます。(同時にぽぽたが500以上の星の名前をどうするか考えてました)
平日は1時間の開発時間が取れれば良い方なのですが、今回は調子が良く、この時期には基本的な所は出来てました。

星が他の星に取り込まれると言う所まで出来てます。

ただ星が取り込まれるのは面白く無い為悩んでました。
そこで出た結論が、

そうだ爆発しよう

んで出来上がったのがこれ

宇宙戦争が勃発。
と言うか重くてゲームにならん

後、この時に↓みたいなログを入れて見たら意外に面白く仕様として盛り込むことに

f:id:project-unknown:20171121003956p:plain

4日目

ログの実装。
と言うか星が消滅しただのログに出すには、全てをManagerクラスで管理するのは設計的に宜しくないと思い、オブジェクト指向ライクに星が自分の状態が変わった際にiOSで言う、Notificationっぽい通知を送るのが良いかと良いやり方が無いかと探り、EventBusに行き着き実装。

iOSのNotificationの時にも苦しめられましたが、やはりこの手の設計は非常にデバッグがし辛くバグの温床でした。

しかし、他に良いやり方を知らなかった為、だましだましで実装した為、平日の貴重な1時間を全てこれにつぎ込んでしまいました(;´Д`)

そして出来たのがこれ

既にほぼ完成形です。
またTweetしている通り、この時負荷にも非常に悩んでおり、オブジェクトプールに挑戦。
(あまり負荷軽減にならなかった。

5 - 6日目

とにかく細かい所の作り込みです。
このタイミングで、せいめい機能やちいさなきんか機能が追加されました (ショップはこの段階ではまだ)

6日目に徹夜しての7日目突入

締め切り当日の朝に、やろうとしていた事の半分も出来ていなく、あきらめモードでした(Twitterに言い訳を書きましたが、基本機能しか間に合ってません)

ふとなんで俺はこんなに頑張っているんだろうと悟りの境地に入りましたが、ふと朝飯を買いに行ったコンビニで

f:id:project-unknown:20171121005112p:plain

こんなん見つけた為に、勢いで購入し身体にムチを打って開発着手
激強打破って眠眠打破の最上位系があるんですね・・・

午前中から15時くらいまでにショップ機能のUIと購入後星追加まで実装して、WebGLに書き出し

Bloom部分がくっそダサい

しかしもうクオリティを挙げて居る余裕など無いのと、uGUI部分が尽くバグっていたりメモリリークで落ちたり(WebGLのスタックトレースが出す意味あるの?ってレベルでひどかったので原因究明できず)で、とにかくなんとか動作してるやってレベルになったので、作品公開。

利用アセット

今回もアセットには大変お世話になりました。
ここでは利用させて戴いたアセットを載せていきます。

拡張しやすいFSM:『Arbor 2』

もう私の中では神Assetでとにかくお世話になっています。
凝った所をArbor2に任せようとするとそれなりに役割分担を考えたり設計しないと導入し辛いですが、他のゲームでも共通して使えるような所は、自前のArborスクリプトを突っ込んでパッケージ管理してます。
(単純なSceneやボタン周り、SE周りの自前スクリプトを数十個用意して、unity package化して直ぐに突っ込めるように管理しています)
このAssetのお陰で、平日1時間しか開発時間が取れなくても、間に合わせることが出来ました。

このブログでも何度か登場していますので、以下も御覧ください。

www.project-unknown.jp

www.project-unknown.jp

www.project-unknown.jp

www.project-unknown.jp

G2U

このAssetはGoogleスプレッドシートで入力したデータをUnityに突っ込むことが出来る優れものです。
ゲームのメタデータや、ローカライズ等に威力を発揮します。

ぽぽたが考えてくれた500以上の星の名前を一々コードに落とすのはしんどいので、スプレッドシートに書いてもらって、それをこのAssetを使ってUnityに突っ込みます。

Unity上では、Static Databaseと銘を打ったStaticクラスを自動生成してくれたり、Dynamicと称してGameObjectライクに使えたり、JSONとして扱えたり様々なスタイルに変換してくれるので非常に便利です。

UniRx

最近LINQを使えるようになったのと、iOSのアプリでちょくちょくRxSwiftを使っているので、このアセットは個人的にツボをくすぐられます。
何より、Unityのプロシージャ的機能を、関数型ライクにコードを書いていけるのが非常に素晴らしい。
まだまだ全体の5%も使いこなせていないですが、既に必須アセットの1つとなっています。

また、Arbor2の時の項目にも記載しましたが、Arbor2とUniRxを組み合わせると、Arborでプロシージャ周りの機能を共通ライブラリ的に作り上げていけるので非常におすすめです。

DOTween

かなりの人が使っているんじゃないかしら?というアニメーション周りを簡潔にコードで記載出来るアセットですね。

iTween

DoTweenとかぶる所があるのですが、DOTweenでiTweenで言う所の「ValueTo」の書き方がわからなかったので、iTweenを使いました。

具体的には、スタートボタンを押した後に、uGuiをフェードインで画面描画しているのですが、その際に以下のようなコードでフェードイン処理を行ってます。

   /// <summary>
    /// ログウィンドウを表示します
    /// </summary>
    public void Display() {
        iTween.ValueTo(
            this.gameObject,
                iTween.Hash(
                    "time", 1.5f,
                    "from", 0f,
                    "to", 1f,
                    "onupdate", "DisplayLogWindowAlpha",
                    "EaseType", iTween.EaseType.easeOutSine
            )
        );
    }

    /// <summary>
    /// ログウィンドウのiTweenから1フレーム毎に呼ばれるメソッドです。
    /// フレーム毎のAlpha値をセットします。
    /// </summary>
    /// <param name="newValue"></param>
    void DisplayLogWindowAlpha(float newValue) {
        GetComponent<CanvasGroup>().alpha = newValue;
    }

こんな感じで、timeに設定した間、1フレーム毎に、DisplayLogWindowAlphaメソッドを呼ぶ(その際の引数は、該当フレームでのα値)機能を簡単に作れます。

Post Processing Stack

これも非常に有名なアセットですね。
カメラに視覚効果を追加するアセットで、主に星の輝きに使っています。
(ただWebGLで出力した際にBloomがださくなってしまったために、使いこなせてません)

First Fantasy for Mobile

個人的にすごく好きなアセットで、こういう世界観が好きでいつか自分のゲームに登場させたいと購入していたアセットです。

今回はビッグバンの表現に使っています。(モデリングだけでなく、パーティクルがまた素晴らしい)

Terrainに使える素材も梱包されているので、これ1つあれば中規模のゲームのステージ全部まかなえているんじゃないかな?と思ってます。(これで2000円位で購入出来るので、非常にお買い得かと)

f:id:project-unknown:20171121011932p:plain

f:id:project-unknown:20171121011947p:plain

f:id:project-unknown:20171121012056p:plain

VSCode

VSCodeでコード書く際には必須ですね。
私は数ヶ月前からVSCodeに移住しているので、無いともうあかんです。
(と言うかアセット突っ込まなくてもVSCodeでUnity環境整えるようにして欲しいくらいです….

総評

今回はこれまでと違って、初日から行動できたのはかなりでかく、じゃないと作り慣れていない3Dのゲームなんかできなかったんじゃないかと思います。
が、エターナル現象が発生してしまい、結局ギリギリになり、丁度なボリューム感に収める難しさを学びました。
後は、負荷やら目に見えてバグだとわかっている所とか、時間という言い訳の元、見て見ぬふりするのが本当に辛かったです。
最近Unityがやっと少し使いこなせてきたなーと思っていたのですが、まだまだだと痛感できたのは良い学びでした。

上記に加え、課題とやりたい事がまだまだ沢山あります。

  • 負荷対策
  • セーブ機能
  • 様々な星のイベント (実は購入出来るけど、きいろの星を買っても何も起きません…(;・∀・)
  • アプリ化
  • ●●モード (アプリ化する際に実装予定

とりあえず、負荷がはんぱないのでまずはそれに着手していこうと思います。