UnityAssetStoreJapanのスクショコンテスト応募時の備忘録

UnityAssetStoreJapanのスクショコンテストに投稿したので、感想と触ったアセットについての備忘録を残しておく次第。

参加したのはこれ↓
お題にチャレンジ!Vol.3: バス停がある風景のスクリーンショット

ざっくり感想
月並みだけれど、とても楽しみながら作れた。
スクリーンショット1枚完成させるだけでいいってのは、心理的なハードルが低くて嬉しい。
unityroomの1週間ゲームジャムが終わった後も少しずつゲームを作っているのだけれど、そっちを作る合間の気分転換にちょうど良かった。
拙いところもあるけれど、とりあえずは満足いく出来に仕上がったかな。

コンセプト
お題を見てすぐに書いた手元のメモだと、こんな感じで2パターンあった。

A「(無題)」
夜、ゾンビが迫る、主人公が銃を構えて周囲を警戒しながらバス停でバスを待つ、ライトで暗闇を切り裂いてゾンビをはね飛ばしながらバスが迫る、バスにはゾンビ撃退用のオプションが色々と施されている

B「始まりの日」
ビル群、横転して炎上したバス、バス停の前にたたずむ少年、少年に手を差し伸べる巨大な戦闘兵器、戦闘兵器のコックピットから身を乗り出す人影(少女だとボーイ・ミーツ・ガールな感じだが、逆光で黒い人影がヘルメットを被っているとかでもいいかも)

お題があっても趣味が偏っているのがよく分かる……
どちらも悪くないと思ったけれど、Amazon PrimeビデオにHIGH SCHOOL OF THE DEADを見つけたので、それを見ながらA案で作ることになった。

作成時の流れ
アイデアは固まっていたので、バス停と街のアセットを探すことに。
最近になってアセットを買い漁っているものの、まだまだ手持ちは少ないので、現在制作中のゲームでも使えるようなものを選択。

今回購入したのはPOLYGON – City Pack。
短時間で街をイチから構成するセンスはないので、大人しくデモシーンを開いて、その中にあったバス停周辺をベースに作業開始。

デモシーン+最初のカメラアングル案

そしてここで気が付く、アセットにはバス停が入ってるけどバスが入ってない……
というわけで少し前に購入していたLow Poly Ultimate Packから、バス(っぽい感じの車両)を持ってくる。

次は頭の中にあるイメージに近づけるために、シーン全体を暗くする。
シーン全体に影響する光源は以下の手順で設定。
適当な光源オブジェクトをDirectionalで作成、メニュー→Window→Lighting→Sun Sourceで作った光源を指定。
あとはシーン内の様子を見ながらDirectionalな光源を回転させたりIntensityを調整する。
完全に暗くするだけならSun Sourceとした光源を無効化してもOK。

車両を配置してシーン全体を暗くした後は、近くの車両(バス含む)や信号機などに光源を設定していく。
ヘッドライトのところにCylinderオブジェクトを置いて、適当なマテリアルを設定し、マテリアルのShaderの設定でEmissionにチェックを入れて暗いシーン内でも光源を表現するオブジェクトとして目立つように。
次にCylinderから少しずらしてSpotLightの光源を作成して、カメラの位置や画面に映したいものを考えつつ微調整。

CylinderのMaterial(Emission = true)

SpotLight

光源設定後

カメラをいくつか配置して大体の構図を考えつつ、ゾンビを配置。
フリーアセットでいい感じのゾンビに出会えたので、それを使いました。
ゾンビは位置と向きをずらして10体程度の塊ごとに一つの親オブジェクトに放り込んで、ざくざく位置取りを調整。
(ちなみに何気なくカメラの至近距離に1体置いたら、予想以上にいい雰囲気で気に入ってしまったので、この時点で三人称視点のスクショ予定を一人称視点に変更することにしている)

ゾンビを追加

ゾンビもの+夜なら雨も欲しい、ということで下記の2アセットをインポート。
Rain Drop Effect 2でカメラに水滴が付くような演出を加えて、Rain Makerでシーン内に雨を降らせた。
どちらもprefabを一つシーン内に追加するだけで対応できて、アセットのパワーを実感する。
特にRain Makerの方はInspectorから雨の強さ(Rain Intensity)のパラメータを弄るだけで、効果音までかっこよく調整してくれるのでちょっと感動。

RainMakerのPrefab

血の表現は最後に追加した。
開始当初はInk Painterを使って血のりっぽく見せようかと思ったのだけれど、イメージ通りの表現にはならなかったので、改めて別のアセットを探した。
そして見つけたBlood Decal-Meshes、$1を切るまさかの安価で、何種類かの血のりメッシュが手に入って嬉しい。
インポート時点のプレハブに血のりをまとめたプレハブも用意されていて、意外とこれが便利だった。
こいつを適当にサイズ調整して角度を変えてばら撒くだけで、暗いシーンなら結構「それっぽく」見える。

てんこ盛り血のりプレハブ

血のりをシーンに入れた後

作成時のおおまかな流れはこんな感じ。
あとはカメラやゾンビの位置、光源や血のりを微調整して、納得できたタイミングでスクリーンショットを撮って完成。

他のアセットもちょくちょくインポートして色々試していたので、完成までの作業時間は6~7時間程度かな?
予想よりかなり時間がかかってしまったけど、こうやってメモしておけば次はもっとサクサク進められるはず!

さて、明日からはまたゲーム開発に戻るぞー

アセット「Curved World」を使い始める

ゲーム開発欲が高まってきたので、気になるアセットを手当たり次第に購入しつつ、ちょっとずつゲームを作ってます
今回は「Curved World」を使い始める段階で早速躓いたので、(主に忘れがちな自分向けに)記事に残しておきます

とりあえずサンプルシーンを動かす
まさかのこの時点で躓くという失態
アセットインポート→サンプルシーンを開く→Play で、うまく動かない
具体的にどうなっているかというと、サンプルシーンで上手いこと曲がって表示されるはずなのに曲がっていない
ウェブで調べて、Curved World ControllerスクリプトでCurcedWorldが制御されることを確認するも、Project Bend TypeがUnknownになっていて変更できない!
どのサンプルシーンを開いても同じ状態だ!
といった感じ

結論としては、Curved World ControllerのProject Bend Typeはメニューの項目から予め変更が必要とのこと
(普通にシーン内にテキストで書いてあったけれど、文字が小さくて読みにくかったから読み飛ばしてたんや……)

メニュー→Window→VaccumShaders→Curved World Settings からダイアログを開いてBend Typeを指定してUpdate Shadersで設定できる

自作のシーン内でLittle Planetを使う
1.Hierarchy→Create→EmptyObjectで適当なGameObjectを作成
2.GameObjectを選択して、メニュー→Component→VaccumShaders→Curved World→Controller でCurved World Controllerスクリプトを追加する
※一応InspectorのAdd Componentでも追加できるけど、その場合の指定は”Controller”だけなのですごく分かりにくい
3.Curved World ControllerのPivot Pointに基点にしたいカメラを設定する
(これを設定し損ねると、カメラが移動したときにShaderで曲げる位置がカメラ基点でなくなるので、移動するごとにずれてしまう)
4.X(Y) Axis Bend Size に -45 とか適当な数値をセットする
(XYを同じ値にすると丸く曲げてくれる)

Little Planetを適当に触りながら思ったこと
Curved WorldのLittle Planetを使うことで、平面のフィールドを球状に見せることができる
ただし、これは球体として存在しているわけではないので、当然平面の端まで行くとその先はない
ゲームフィールド上をプレイヤーの操作するキャラクター(カメラ)でぐるりと一周できるようにするには、何らかの手段で平面の端を動的に生成する必要がある
今回作ろうとしているゲームでは惑星の上をぐるぐる周回できるようにしたかったので、惑星を適当な数に分割した平面で表現してプレイヤーキャラの位置に応じて視界外の分割された平面を適宜移動させるようにしてみた
(ちなみにこの方法だと、平面全体の面積をいい感じに球の面積と一致させるのが大変なので、色々と試行錯誤中)

平面で色々制御できる利点を捨ててもいいのであれば、最初から球状のメッシュを用意してその周囲をぐるぐる回れるように実装する方が簡単かもしれない


Curved Worldはアイデア次第で色々なところで使えそうなので、今後も少しずつ試していきたい