石像備忘録

モアイ像がいろんなメモを書き残す場

unity1week「Sukimania」制作ログ

こんにちは、しもむ~です。

Unity 1週間ゲームジャム | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

2017-11-13 〜 2017-11-19にunityroomで開催された1週間ゲームジャムに参加しました
お題は「space」でした。

ゲーム内容決め

とりあえず「space」と聞いて「隙間」という単語を思い浮かべました
dic.nicovideo.jp で、エースコンバットというゲームには「スキマニア・クグロフ」と呼ばれる物があります。
所謂「任務そっちのけで高速で隙間をくぐり抜けることに快感を覚える人達」です。
今回はそういう快感に特化したゲームにしようと考えました。

実装開始

内容を早めに決めることが出来たので実装は早めに取り掛かることができました。

プレイヤー挙動

f:id:simomuuu:20171120145512p:plain:w300

プレイヤーはシンプルに立方体に少し手を加えたものにしました。
最初はただの立方体だったのですが、

  • 次の隙間が見辛い

  • 伸縮方向がわからない

の二つの問題点があったので半透明&伸縮方向のエッジのカラーを変更しました。

f:id:simomuuu:20171120145713g:plain:w300

回転と変形はそれぞれVector3.Lerpを使用し滑らかに変形します。
当たり判定のみ即時に回転、変形し、メッシュがそれに追従する形になります。

迫りくる隙間

f:id:simomuuu:20171120145527p:plain:w300

プレイヤーの挙動に合わせて2種類の隙間を用意し、生成時に角度を決定しています。
3DモデルはBlenderで作成しました。

f:id:simomuuu:20171120145530p:plain:w300

隙間は一部の色が通過時にシアン、失敗時にレッドに変わるようにしました。 通過時の低音はこの隙間を発生源にすることにより「通過した感」を出しています。

周辺パーティクル

前に進んでる感を出したかったのでまわりに適当な物を飛ばそうと考えました
通常のパーティクルでも良かったのですが、   今回はプレイヤーと同じ物体を飛ばしました。

f:id:simomuuu:20171120152135g:plain:w300

また、生成範囲はプレイヤーと被らないように
min半径以上max半径以下に生成します。

float angle = Random.Range(0.0f, 360.0f);
float radius = Random.Range(minRadius, maxRadius);
float x = Mathf.Cos(angle * Mathf.Deg2Rad) * radius;
float y = Mathf.Sin(angle * Mathf.Deg2Rad) * radius;
gameObject.transform.position = new Vector3(x, y, 22.0f);

このような実装にしました。

さらに、試遊時に知人から
「スピードアップ時の集中線的な何かが欲しい」
との要望から

f:id:simomuuu:20171120145532p:plain:w300

このようなパーティクルを用意し、平行投影に設定した別カメラからこのパーティクルを写すようにしました
※参考
akeyunitydev.hatenablog.jp

ImageEffect

https://www.assetstore.unity3d.com/jp/#!/content/83912
Post Processing Stackを使用しました。
使用したのは

  • Antialiasing

  • Motion Blur

  • Bloom

です。

ランキング、ツイート

blog.naichilab.com
ランキングはnaichiさんのunity-simple-rankingを使用
ツイートはこんな感じの実装をしました。

public static void Tweet(int score, int level) {
    string text = string.Format("{0}個の隙間をすり抜けました\n到達レベル:{1}\n#unity1week #unity3d #Sukimania\n", score, level);
    text += "https://unityroom.com/games/sukimania";
    string url = "http://twitter.com/intent/tweet?text=" + WWW.EscapeURL(text);
    if (Application.platform == RuntimePlatform.WebGLPlayer) {
        Application.ExternalEval("window.open(\"" + url + "\",\"_blank\")");
        return;
    }
    Application.OpenURL(url);
}

その他アクシデント

基本的にアクシデントなく開発は出来たのですが、締め切り2時間前に
CanvasのGraphicRaycasterを誤って削除し、それにしばらく気が付きませんでした。

f:id:simomuuu:20171120145534p:plain:w300

これはuGUIが動作する上で必要なコンポーネントなので、
Buttonが一切反応せずに焦りました。
(Unityのバグまで真面目に疑ってしまいました)

完成

タイトルはこの記事冒頭の「スキマニア・クグロフ」から取り
「Sukimania」にしました。

完成したものはこちらで遊べます。
https://unityroom.com/games/sukimaniaunityroom.com

なお、自分の記録は80ぐらいなのですが今記録を見たら100超えがいて驚いてます。