スキップしてメイン コンテンツに移動

フリーのアセット/素材のおかげで爆誕した高速3Dアクションゲーム「Dangerous Space Transporter ~危険な宇宙の運び屋~」について

Unity1Week の今回のテーマは「Space」でした。
すきま、空間、宇宙、スペースキーといろいろ思案した結果、3Dの宇宙空間の運び屋というテーマを選びました。
その結果できたのが、タイトルの「Dangerous Space Transporter ~危険な宇宙の運び屋~」です。






今までも、フリーのアセットを多少は使ってきましたが、あまり積極的に利用するという気持ちはありませんでした。
特にデザインが色濃くでる3Dモデルなどは、なんとなく敬遠していました。

しかし、今回の unity1week のキャンペーンで積極的に使ってみると、今までは出来なかった表現が楽しめるようになりました。

今回は、ゲームDSTの制作について、アセットの紹介を踏まえながら書きたいと思います。

unity1week で作っていたときの感じ

unity1week開催の数日前にバウチャーが何とかという話はツイッターで知っていました。

とりあえず、テーマを聞いて、思い浮かんだら作ろうといつもどおり思ってました。
今回はバウチャー(報酬)がもらえるということで、いつもより積極的だったことは否めません。

そんなこんなで出されたテーマは「Space」。
とりあえずキーボードのスペースキーをじーっとみました。
(スペースキーって良く見ると「Space」とすら打たれていないんですね。少なくとも自分のはそうでした)

その後に浮かんだのが、レトロな2Dシューティングです。
レトロといってもすごい作品がたくさんあるので、もっと具体的にいえば、シンプルなレトロな2Dシューティングです。

だけど、せっかくアセットを使うなら、3Dもいいんじゃないかと思って考えたのが今回のゲーム制作の始まりです。

3Dアクションというと、私はダークソウル2しかクリア(DLCは含まない)した覚えがありません。
(しかも、敵を地味に枯らしながら進むスタイルでした)

他にゾンビを倒すメジャーなゲームもやりましたが、基本的に操作が難しくて楽しめません。
もう、ルールを覚えるのがストレスになってだめだし、実際やってみてもうまく動かなくてつまんないというパターンが多いんですよね。

そんな自分でも、3Dで楽しめるにはどうしたらいいか。

とりあえず、操作をなるべくシンプルにすることにしました。
シンプルでいて、プレイした満足感を味わえる塩梅を考えました。

そこで思いついたのが、勝手に3D空間を前進する状態で、敵をよけつつ、加速アイテムをとって、ゴールになるべく速くたどりつくことを目的にするゲームでした。

これって、勝手に3Dとして進むけど、実際の操作は上下左右の2Dなんですよね。
でも、3Dな雰囲気も味わえるし、自分的にも3Dを操作したぞ!って感じになると思いました。
だから3Dゲーと思っていいと思います。

最初は、HPを設定して、敵に何回かぶつかったら負けとか回復アイテムとか考えたのですが、せっかくがんばったのに途中でゲームオーバーはやだなと思い、あきらめなければクリアできる設定にしました。
ぬるゲーという人はタイムアタックをすればいいだけだし、僕は下手なゲームプレイヤーなので下手でもなるべくストレスを受けないようにしたかったです。

実装で一番がんばったのは、クイックイッとコースのコーナーで視点が回転することです。
3Dの表現でこれだけはやりたかったんですよね。

NavMesh とかいろいろ方法はあると思うのですが、とりあえず簡単に実装できそうだったので、トリガーを持つ GameObject の配列要素を順に追いかける作りにしました。

目標の GameObject に接触したら、その次の要素に角度を3秒くらいで変えて直進するっていうトラクターコンポーネントを作って、それにカメラの案内をさせる感じです。
カメラの先には固定でプレイヤー機が存在し、カメラのフレームの範囲内で自由に上下左右に移動できるようにします。
あとは、岩にぶつかったら減速、ブーストリングにぶつかったら加速というだけです。

でも、これだけのゲームの作成でも3日間かかりました。
ゲームのアイデアを考える時間も考えると5日ほどかかりました。

アイデアを思いついて、「~だけ」という表現になるまでシンプルにすることが最近はとても重要だと思っています。
「~も」という表現が残っているうちはまだまだ収拾がついていない状態だと思います。

「~だけ」といっても意外とえぐい要素があったりするので安心はできませんが、けずっていくことで本質が見えたり、他の思わぬ要素と結び付けやすくなると思います。
単純すぎてつまんなくてもだめですが、ごちゃごちゃしてると作れないし、ごちゃごちゃなものを作ってもどう受け止めていいか混乱してしまいます。

今回のゲームは、ブーストリングで加速する快感を中心に作りました。
3Dは経験が浅いですが、その部分だけはこだわったつもりです。
ブーストリングにふれると、ジェット噴射のようなものがかっこよくバリバリッと出て、音もいい感じでなって、メーターがビューンとあがるようにしました。

小惑星にぶつかったときは、逆にがっかりするようにしました。
本当は、カメラをぶるぶる振動させたかったのですが今の実装ではちょっと難しくてやめました。
そのかわり、一瞬スクリーンを赤くしてダメージをうけた感じを表現しました。

減速したりブーストリングを通過しそこねて、とろとろになって、次のブーストリングまで待つところをプレイヤーへの抑圧(ストレス)にしています。
それをブーストリングにふれることで解放する感じにしました。

実装の3日目のほとんどを使ったのがステージの設計です。
最初に、こんなトラップがあるといいなというのを6つくらいノートに書いて、それをレベル順に並び替えて実際に配置していきました。
100回以上は実際にプレイしながらの微調整をしたと思います。
3D制作になれている人ならばもっと短時間でできたのかもしれませんが、ちょっと試しては小惑星の配置をずらすということを何度もやりました。

長々と語りましたが、まとめると
  • バウチャー(報酬)もらえるし、3Dとかのアセットもいっぱい使ってみよう
  • 3D操作が下手でも楽しめるようにしよう
  • 加速する感覚をSFっぽく楽しみたい
です。
あんまり成果はでなかったかもしれませんが、テストプレイのときは結構わくわくしました。

ここからは、今回使ったアセットについて紹介したいと思います。

使ったアセットについて

アルファベット順。全部無料。

Action Music Pack


このゲームで使っている3つのBGMはすべてこのアセットのものです。
かっこいいですね。SFに限らずRPG系でも使えそうなバトル系が多いです。

Arcade SFX Free


このゲームのボタン音、ゲーム開始音、ブースト音などの効果音はすべてのこのアセットのものです。
SFな感じの効果音以外にもレトロなジャンプやコイン取得の音などもあります。

iTween


かなり前からお世話になっています。オブジェクトに動きをつけるときに便利なスクリプトです。移動・回転・拡大のアニメーションをさくっとやってくれます。

KY Magic Effects Free


今回のブーストのかっこよさを演出してくれた素敵なCGエフェクトを含むアセットです。魔法っぽいエフェクトが数種類あります。ループの可否や表示する時間の長さなどもアレンジできるみたいです。

LeaderboardForUnityWebGL

https://github.com/NCMBMania/LeaderboardForUnityWebGL

ネットのランキングをお手軽に実装できたのはこのアセットのおかげです。
github のリンクしか知らないのでアセットかどうかも厳密にはわかりませんが、何度もお世話になっています。

Modular Space Raider


今回のゲームのプレイヤー機のモデルが含まれているアセットです。宇宙船っぽいかっこいいモデルが数種類あります。

MSFMC - Radar Dish


今回のゴールの基地として使ったオブジェクトを含むアセットです。レーダーらしいですが、SFで幅広く使える感じがします。色も変更して使うことができます。

Skybox Volume 2 (Nebula)


今回の背景のスカイボックスです。数種類のきれいな宇宙の背景が選べます。これを入れただけで宇宙!って感じがして、視点を変えるだけでガラッと違う雰囲気を出せました。

Space Asteroids


今回の小惑星を含む多くの小惑星の3Dモデルのアセットです。たくさん配置して小惑星群を表現できました。接近して拡大しても荒く感じないリアルさがあります。

M+ FONTS
アセットではありませんが、今までもお世話になっているフォント素材として、 M+ FONTS も紹介します。今回も多くのテキストで使わせていただきました。

今回の感想

今までほとんど2Dだけを作ってきたので、3Dのゲームを作るのはいろいろと学ぶことも多かったです。
不慣れなため、簡単にできそうなのにできないことも多くありました。

しかし、フリーのアセットを用いるだけで、難しいと思っている3Dのゲームも想像よりも簡単に作ることができるということを知りました。
また、今回の unity1week の他の作品を見て、3Dでもとてもかわいらしく仕上げられることを発見できました。

なんとなくやっぱり次は2Dを作りたいという気分のほうが強いのですが、また機会があったら3Dも挑戦したいと思っています。

改めまして、unityroom 様には貴重な作成の機会と公開の場を与えていただき感謝致します。


コメント

このブログの人気の投稿

QTableView で表を表示してみる

タイトルは駄洒落を狙っているわけではありません。 こんばんわ SakuraCrowd です。 今回は今作っているソフトの経過報告です。 最近のブログのパターンは、 「XXX作ったよ。これがスクリーンショットね。あとこんなこと思ったよ。」 という流れですが、 今日はできていないソフトの部分的な話なので、 いつもよりもプログラムちっくな話になると思います。(´Ծ_Ծ´)メガネノトキハマジメブッテル QTableView は GUIライブラリ Qt のクラスです。 それを Python で使うための PySide というライブラリを使っています。 某表計算ソフト っぽい表の GUI です。 このデータの日付が 09/01 なのでおそらくその日に   QTableView 使うぞ!(`・ω・´) とサンプルデータを作ったのでしょう。 Qt Designer という GUI エディタを使うとポトペタでウィンドウを設計できます。 選択できる GUI の中に QTableView と QTableWidget があります。 どちらも上のような表の GUI です。 QTableWidget は 簡単 に値をいれたりできます。 Qt Designer 上で直接編集 することができるので、 サンプルの表を簡単に作ることができます。 それに対して、 QTableView は Qt Designer 上では値を編集できません。たぶん。 QTableView の強みは MVC の構造 を使えることです。 名前のとおり QTableView は View です。 これにデータを管理している Model オブジェクトを設定して使います。 Model クラスを作る手間がかかりますが、 GUI の細かな操作をしなくても Model に応じた表を表示してくれます。 Model は QAbstractTableModel を 継承 して作ります。 コンストラクタで基底クラスの処理を呼び出し、いくつかの純粋仮想関数をオーバーライドします。 def __init__ ( self , parent= None , *args):

LibreOffice Writer 文書の差分 (WinMerge x TortoiseGit) + 社畜PCの原因と対策

お久しぶりです。皆様におかれましてはお風邪などをひかれてはいませんでしょうか。 春と秋だけあればいいのにヽ(`Д´)ノとつい思ってしまう SakuraCrowd です。 今日はいつものような製作日記ではなく、ちょっとした役立つメモを書きました。 タイトルにもあるとおり、 TortoiseGit への WinMerge の導入の仕方です。 今まではソースコードくらいしか差分で確認しなかったので、 TortoiseGit 標準の Diff ツールで問題なかったのですが、 LibreOffice の Writer が最近自分の中で便利だと話題になっていて、それを差分表示するためにちょっと調べてみました。 #Writer は、文章書いて、ちょっと絵をいれたり表を作るのに便利だと思います。 #リッチテキストのエディタを探していて、これが一番よさそうな気がしたので使ってます。 それとブログを書くときはあまり長く書かないつもりだった、 Win7 PC が社畜PCになってしまった際の原因と対策も後半に書きました。割と有用な情報かもしれませんので、時間がありましたらご覧下さい。 まずは TortoiseGit で Writer の odt ファイルを管理して、差分も普通に表示させる方法です。 WinMerge(+plugin) 導入手順 すでに TortoiseGit はインストールしてある前提ではなします。 1.信頼と実績の窓の杜様から WinMerge 日本語版をダウンロードします。 WinMerge - 窓の杜ライブラリ 私の PC は 64 ビット版なのでそちらを選びました。 2.WinMerge をインストールします。 フォルダを指定し普通にインストールできます。 インストール直前の設定で TortoiseGit をチェックしておくと自動的に TortoiseGit の利用する Diff ツールの設定を置き換えてくれるようです。 これの設定は TortoiseGit の設定の Diff ツールの項目で確認できます。 3.LibreOffice Writer のファイルを読むためのプラグインをダウンロードします。 ぐぐって出てくる英語版のDLサイトは応答がなかったりしましたが、日本語版は大

QWidget の選択時のデザインを CSS で変える方法

ひさびさに書きやすいネタができたので、1ヶ月ぶりくらいに書きます。 ここ1ヶ月の作業内容 タイトルのとおりなのですが、 テーマがいきなりマニアックでとまどったり、 デスチェリー農場の続編はどうしたんだよおおおお! とか新作を楽しみにしている生命が宇宙のどこかにいるかもしれないので あらかじめ書いておくと、 ここ1ヶ月は日記ソフトを作ろうと python + pyside + sqlite の勉強をしていました。 勉強というか、ウィンドウ起動から初めて、 GUI をせっせと作ったり、ファイル保存と復元を作ったりしてます。 Copy & Paste や Redo/Undo など未実装の処理も多くあります。 今回は、タブ遷移とかクリックで選択されたウィジェットの、 背景色が変わるとか、 枠線が出るとか そんな設定を CSS で実現します。 PySide と CSS について PySide は前も Raspberry Pi 2 で使う mount コマンドの GUI ツールで使いました。 Python の GUI フレームワークです。 さすがに HSP ほど簡単にウィンドウを出すことはできませんが、 かなり楽だし、 GUI の種類や機能もかなり充実しています。 ある程度 GUI を作っていて、 こんな露骨なウィンドウだと受けが悪いんじゃないかな と思いました。 なんか今っぽいおしゃれなデザインにしたい。 そんな誘惑にかられて調べていると、 CSS でお手軽にデザインを変更 できることがわかりました。 QWidget 派生のオブジェクトを作る際に、 setStyleSheet(str_css)で css を読み込ませることで簡単に実現できます。 次の例では file.css というファイルに書いた css を QWidget 派生クラスのオブジェクトに読み込ませます。 # css の読み込み with open("file.css","r") as f:     self.setStyleSheet("".join(f.readlines())) いろいろな G