ビールが飲みたい。

ゲーム開発の備忘録などを書きます。

Unity1week お題「space」に参加したときのこと

はじめに

Unity1週間ゲームジャム お題「space」に参加し、無事投稿したのでその時の話を簡単にまとめようと思います。

僕の参加は今回で5回目。

Unity1週間ゲームジャムとは

Unityroomで行われる、naichiさん(@naichilab)主催の1週間でお題に沿ったゲームを制作するゲームジャムです。

f:id:eggame:20170829185948p:plain

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

スタンスは「ゲームを作るきっかけになれば」というもので、基本的にUnityを使ったどんな物でもあり。期限過ぎちゃっても完成しなくても全然オッケー!という非常に条件がゆるく参加しやすいイベントです。

作成したゲームについて

【ディープ・ディガー ミカン】

ディープ・ディガー ミカン | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

f:id:eggame:20171123133724g:plain
宇宙を飛び回り、星から資源を発掘するゲームです。

「ミカン」......「みかん」......「未完」......!(おや?隙間風かな?)

ミカンがいつか取れると良いですね!

使用したAsset

BGM。 (初使用)

ちょっとしたカメラ演出時のエフェクト (初使用)

UI全般の素材 (初使用)

ステージを自動生成する処理の一部に利用 (初使用)

外部ツールTexturePackerでまとめたファイルのインポートに利用

テクスチャーの掘削などに利用

軽量に動作するスクロールビューの構築

フォントの表示

サウンドマネージャー

細かなアニメーションの制御

データの保存

ポストプロセス

リアクティブプログラミング

DIコンテナ。シングルトンの代わり

フォントはNasuとUbuntu、自機などのテクスチャーはopengameart.orgのpublic domain素材

いつも通り、容赦のないアセットの盛りっぷりです :)
僕が作った素材は、きれいなコンクリっぽいシームレステクスチャに藍色の色を加えて、宇宙の背景にしたくらいでしょうか。

ネタ出しの話

週前半に仕事が詰まっていることが確定していたので、元々あまり参加する気はありませんでしたが、お題を見た時にフッと色々案が思い浮かんできたので、一応やれそうだったらこうしよう!という形で妄想はしていました。

「space」ということで、最初に考えたネタは商隊が町から町へ積荷を運んでいくゲームで、食糧と積荷をバランスよくスペースに詰め込んで食糧を消費しながら移動していくという物でした。

ちょうどRPGっぽいゲームを作り始めていて、ワールドマップを移動する演出に何か良いものがないか考えていたため、それに引っ張られています。

お題発表から3時間位で出したネタ。

コンセプトをノートに書いて写メをTwitterにアップしました。

が、しかし!

これ単体では全然楽しくなさそう!!!

仕事も忙しいだろうし、ノれるネタじゃないからやっぱやめよう。

と思った結果、ツイ消しして寝ることに。
わずか2時間の命でした。

しかしなんだかんだいって考え始めると止まらなくなる質なので、翌日も仕事しながらネタは考えます。

ストレートにspaceを宇宙と捉えることと、第3回目で使って以来タンスの肥やしになっていたDestructible 2Dを使った発掘ゲームにしよう!と月曜日には決めてました。

数日経って、予定していた仕事が後ろにずれて暇ができたため、水曜日辺りには結局作り始めます。

時間もあまり無いし、アセットいっぱい使ってね月間*1なので、宇宙空間を360°飛び回るゲームで何かのサンプルプロジェクトをベースにしようと考え、3つくらいサンプルゲームを見ましたが、Destructible 2Dに同梱されていたサンプルゲームがイメージにドンピシャだったため、これをベースにすることに。

unityroom & 1week GAMEJAMの投稿作品にアセットを登録してバウチャーをゲットしよう! – Unity公式 Asset Portal

進捗動画としてアップするといつも以上に反応があったため、「このシステムを基礎としたアプリいけるかも?」と思った結果、予め期限ぶっちぎる前提で素材収集と強化をしていけるゲームに仕上げることにし、アセットも容赦なく突っ込んでいくことに決定しました。

(自力でここまで作り上げたんか...!って感動された方、申し訳ない。感動をお返し致します😱)

そして無限に広がっていく風呂敷......。

今もなお、風呂敷は広がっています。 正に宇宙!!!

Landscaperを利用した、オブジェクト半自動生成装置の話

少し前にAssetStore企画のスクリーンショットコンテストに投稿しており、その際にTerrain上に、GameObjectを地形に合わせて自動生成するアセットを利用しました。

お題にチャレンジ!Vol.2: 大草原にたたずむ小さな家のスクリーンショット – Unity公式 Asset Portal

f:id:eggame:20171123125823p:plain

(ありがたいことに大賞をいただき、ユニティちゃんグッズもらえる事になりました。やったね嬉しい!)

この草原、GameObjectで草2万個くらい生やしてます。

Terrainの凹凸の傾斜角度や、塗られているテクスチャーの種類(草とか土地面とか岩肌とか)を見て、それに沿ってGameObjectをいい感じに生成してくれるアセットです。

この時はパーリンノイズによりTerrainを自動的に隆起させるプログラムを書き、Terrainに隆起を発生させた後、草大量に生やしました。草。

f:id:eggame:20171123130522p:plain

(実際の所、カメラに映る範囲だけ生やしたいため、カメラに映らない範囲は禿げ上がってます。草原のように見えますが、砂漠です。

spaceマップの作り方

  1. 縦横深さと隆起のサイズを決めます
  2. Terrainに自動で隆起を発生させるプログラムを書き、隆起を発生させます。
    youtu.be
  3. Landscaperで利用するScriptableObjectにGameObjectのバラ巻き方を色々設定し、生成します。
    youtu.be
  4. 生成したままだとTerrainの隆起に合わせて角度や位置が設定されているので、これらを実際利用するpositionとrotationに変換します。
    youtu.be
  5. この生成したSceneをGameObjectのみ存在するSceneとして保存しておき、ステージ開始時にAdditiveで追加します。(この際、自機の出現ポイント(0,0)にオブジェクトがないことを確認します。)

生成したいものとして登録する際の設定項目に、重みづけ、距離感、Terrainの傾斜、Terrainのどのテクスチャー上に生やすか、など設定でき、星も敵もなんでもまとめていい感じに自動生成出来るので、かなり手間が省けました。

本当はその作業すらゲーム内で自動的に行えると良いと思いますので、後々時間をかけてアルゴリズムを考えるかもしれません。
(面倒なのでこの方式でそのまま運用するかもしれません)

まとめ

良かった点

  • 削るの気持ちィィ
  • Terrainについて理解が進んだ
  • Multi Scene Edditingをもっと積極的に使ってもいいかと思い始めた。(今はあまり使っていないため)

反省点

期限内に出来た機能は、裏方を優先したため(装備選択機能とかショップ機能とか)、ゲーム部分は星に弾を撃って削って近寄るだけ、避けたりしないとゲームオーバーになるような常時何かしなきゃいけないような要素もなく、クリア目的も規定時間が経過するのを待つだけで緩急全くないステージ。

ぶっちゃけて言えば、このゲーム退屈です!!!

装備切り替えなんてまず捨てて、最初にメインの遊びの部分から作るべきだと学びました。(5回目でようやく)

感想

ネタ的には良いと思うんですが、上手く期間内には調理できなかったので、悔しさありますね。
このゲームは今後も調整していく予定なので、興味がありましたら下記のページをご覧下さい。

https://trello.com/b/U8PCJEdI/update

絶対に面白いゲームにしてやるぞ!

*1:UnityroomとAssetStoreのコラボ企画で、ゲームを投稿し利用したアセットを登録して、ゲームページを申請するとAssetStoreで利用できるバウチャーがもらえる企画を開催中です。