のぼるゲーム開発備忘録

ゲーム開発のプログラマーです。ゲーム開発関連、調べた内容をアップしていきます。Unityを使用して個人開発を行っています。

【Unity】【Corgi Engine】2.5Dステージ作成

f:id:ikeball:20210110222113p:plain

はじめに

今回はCorgi Engineでステージ作成をやってみました。
引き続き、手探りながらも調べた内容をメモしています。

f:id:ikeball:20210110222731g:plain

使用アセット

Corgi Engine - 2D + 2.5D Platformer
100+ Hand Painted Textures

地形テクスチャの置き換えに使用しました。

AllSky - 200+ Sky / Skybox Set

スカイボックスの置き換えに使用しました。とても多くのスカイボックスが入っているためPCの残容量に注意です。

Game Music Pack - SUITE

BGMの置き換えに使用しました。アニメ系、RPG系、ボス戦、スポーツ系等様々なジャンルの曲が入っています。

作業環境

Unity 2019.4.16f1

デモシーンのステージ構成

全体の構成

今回もAssets/CorgiEngine/Demos/Corgi3D/NewCorgi3Dのシーンをベースに進めていきます。 NewCorgi3Dシーンを開き確認したところ下記構成になっていました。

f:id:ikeball:20210109153413p:plain

LevelStart

ステージの開始地点の設定が行われています。

Transform のx, yにて開始点の設定
Checkpoint/Spawn のFacing Directionにてステージ開始時のキャラクターの向き
※Box Collider 2Dには深い意味はありません。Checkpointのスクリプトから参照されているようで削除はできませんでした。

f:id:ikeball:20210109154136p:plain

試しに位置と向きを変更してみました。

f:id:ikeball:20210109154930p:plain

シーンビューだと下記位置になります。

f:id:ikeball:20210109155018p:plain

実行確認したところ、指定の位置で、左向きとなっていました。

f:id:ikeball:20210109155248g:plain

Dust

環境用のパーティクル設定が行われています。
設定はパーティクルのみなので、無効化すれば表示されなくなります。
火山等熱いマップでは赤色にしたりと言った使い方ができそうです。

f:id:ikeball:20210109155750p:plain

シーンビューのオレンジで色が付いている部分がDustのパーティクルです。

f:id:ikeball:20210109155920g:plain

試しにパーティクルの設定を少し変更してみました。

f:id:ikeball:20210109163455p:plain

パーティクルのサイズと色を変更しましたので指定通り反映されていること確認できました。

f:id:ikeball:20210109163615g:plain

Ground

地面のオブジェクトで当たり判定を持っています。 特に変わって設定も無さそうですので、Box Collider等のColliderを設定することで判定してくれそうです。

f:id:ikeball:20210109164232p:plain

上の細かいブロック状のものではなく、地面となる大枠のオブジェクトが格納されているようです。

f:id:ikeball:20210109164546p:plain

地面のマテリアル変更

Groundのオブジェクトをクリック、Mesh Rendererに設定されているCorgi3DGroundMaterialをクリックします。

f:id:ikeball:20210109165127p:plain

Corgi3DGroundMaterialのマテリアルをコピーし名前をGroundMaterialに変更しました。

f:id:ikeball:20210109165419p:plain

コピーしたマテリアルをドラッグし、Ground/Mesh Renderer/Materials/Element 0に設定します。

f:id:ikeball:20210109165554p:plain

マテリアルの設定を変更しますので、Inspectorを下までスクロールさせます。

f:id:ikeball:20210109170950p:plain

ここでは下記設定に変更しました。
この設定でないとダメと言うことはありませんので好きな設定に変更してみてください。

Rim ColorをRGBA(255,255,255,0)に設定
DiffuseColorをHSVA(0,0,100,100)に設定
Diffuseにstone_03_p10_pngのテクスチャを設定
100+ Hand Painted Texturesのテクスチャになります。
フリーのテクスチャでも、自前のテクスチャでも好きなものを設定する形で良いと思います。

テクスチャの用意がない場合はDiffuseColorを好きな色に変更し、変化を確認してみてください。

f:id:ikeball:20210109170728p:plain

Groundのマテリアル/テクスチャを変更してみました。 このマテリアルを他のGroundにも反映させれば全部の地面を置き換えられます。

f:id:ikeball:20210109173321g:plain

Stock

配置用のパーツの保管場所みたいです。
無効化状態となっていたので有効化し確認しました。
ここにあるオブジェクトをコピーしてマップに配置することでマップ作製ができそうです。

f:id:ikeball:20210109173737p:plain

地面/壁用のオブジェクトの他、押せるブロックなどのギミックも格納されています。

f:id:ikeball:20210109174007p:plain

CylinderGrey

ポールのオブジェクトです、Scale次第では電柱のような扱いにもできそうです。

f:id:ikeball:20210109184002p:plain

コピーして配置した所問題なく当たり判定がありました。
壁としても使えて、壁蹴りも可能でした。回転させて斜めの床もできました。

f:id:ikeball:20210109183600g:plain

Jumper3D

乗ると打ち上げられるギミックです。 (近くで見たら四角が二つで作られていました)

f:id:ikeball:20210109184413p:plain

コピーして配置してみました。

f:id:ikeball:20210109184616p:plain

Jumper3DのトップについているJumperスクリプトでどれくらい飛ぶか設定ができました。

f:id:ikeball:20210109184842p:plain

ジャンプ台を3つ並べてみました。
一つだけサイズを変えて、Jumper/Jump Platform Boost の設定を上げてみました。
BigJumpを空オブジェクトに入れて移動、拡大しているのは設定のし易さを考慮してになります。
深い意味があるわけではありませんので自分なりの設定方法でやる形で問題ありません。

f:id:ikeball:20210109185637p:plain

実際に動かしたときの動画がこちらです。
値を大きくするとすごい跳びます。

f:id:ikeball:20210109190155g:plain

試しに斜めに配置してみましたがジャンプする方向は真上で斜めには飛びませんでした。

f:id:ikeball:20210109190716p:plain

point5xpoint5/1x1 Yellow - 4x1 Blue Thin

色付きのブロックで当たり判定があります。 Positionはもちろんのこと、Rotation, Scaleの変更もできます。
※Staticのついているオブジェクトのため、実行中に変更しようとしても反映されません。

f:id:ikeball:20210109191837p:plain

45度の角度をつけると急斜面過ぎて歩いて登るには時間がかかります。

f:id:ikeball:20210109192017g:plain

FallingPlatform

乗ると一定時間後に落ちる床です。

f:id:ikeball:20210110002912g:plain

設定で最も重要なことはStaticが外した状態にするです。
実行時に動くオブジェクトのためStaticが付いていると正しく機能しません。

Falling Platformのスクリプトで落ち方の設定が行えます。
Time Before Fall ... このパラメータの秒数上に乗ったら落下します。
Fall Speed ... 落下する際のスピードです。大きいほど落ちるスピードが速いです。
Tolerance ... 落下判定用の値。変更する必要は無さそうに感じています。

f:id:ikeball:20210109234828p:plain

PushablePlatform

押すことのできる箱です。重力の影響を受けます。

f:id:ikeball:20210110003611g:plain

実行中に移動するオブジェクトのためStaticは外した状態にする必要があります。

Pushableのスクリプトにて箱の挙動の設定が行えます。
Push Speedを変更しても実際に押すスピードは変わりませんでした。

f:id:ikeball:20210110003845p:plain

横、縦に2つ繋がっている状態では押すことはできませんでした。

f:id:ikeball:20210110004250p:plain

Lights

シーンで使用するライトが格納されています。

f:id:ikeball:20210110004517p:plain

試しにライトをOFFしてみたところ、裏側世界の表示風になりました。

f:id:ikeball:20210110004628p:plain

f:id:ikeball:20210110004816g:plain

Background

背景オブジェクトで当たり判定の設定はありません。

f:id:ikeball:20210110091637p:plain

背景を非表示にした場合こうなります。

f:id:ikeball:20210110092053p:plain

スカイボックスの変更

背景を非表示にしてもGameビューに雲の表示がありますが、これはスカイボックスの設定になります。
Unityメニュー → Window → Rendering → Lighthing Settings より設定が行えます。

f:id:ikeball:20210110092807p:plain

Skybox Material に設定されているCorgi3DSkyboxMaterialの設定を変更することで差し替えることができそうです。

f:id:ikeball:20210110093048p:plain

Corgi3DSkyboxMaterialをクリックするとProjectビューで対象のスカイボックスマテリアルが選択されます。
Corgi3DSkyboxMaterialをコピーして3DSkyboxMaterialと名前を変更しました。

f:id:ikeball:20210110093948p:plain

Lighting設定のEnvironment/Skybox Materialに3DSkyboxMaterialをドラッグし設定します。

f:id:ikeball:20210110094228p:plain

ここではAllSky - 200+ Sky / Skybox SetアセットのCooton Clouds Sunset 1を設定しました。
アセットストアでフリーのスカイボックスもありますのでお気に入りの一品を探してみてください。

f:id:ikeball:20210110112426p:plain

f:id:ikeball:20210110112135p:plain

スカイボックスを夜のものを使用したのでライトも少し暗くしました。
せっかくスカイボックスを変えたので今はBackgroundを無効化しています。

f:id:ikeball:20210110112940p:plain

スカイボックスとライトを暗くした表示がこちらです。

f:id:ikeball:20210110113208g:plain

GateToNextLevel

これはゴールです。プレイヤーがこの位置にきたらステージクリアとなります。

f:id:ikeball:20210110114159p:plain

4つのコンポーネントがついています。
Finish Levelが重要で他は見た目と当たり判定になります。

f:id:ikeball:20210110114847p:plain

Particle System

オレンジのパーティクルを出している部分。

Finish Level【重要】

ゴールの処理を行っているスクリプトです。
設定次第ではボタンに反応してゴールや、ゴール時に演出を出すといった事も可能です。
今回は最も重要なLevel Nameについて紹介させてください。

f:id:ikeball:20210110121111p:plain

Level Nameに設定されているのはゴールしたら、次に切り替えるシーンの名前になります。
・次のステージのシーン名が設定されていれば、次のステージへ
・エンティングのシーン名が設定されていれば、エンティングへ
・マップ選択画面が設定されていれば、マップ選択画面へ
といった設定ができます。
ここに名前を書くだけではダメで、Build Settingsにシーンが登録されている必要があります。

Unityメニュー → Build Settings... より開けるWindowで設定を行います。
デモシーンで設定されているLevelSelectionも登録されています。
新規のシーンを追加する場合はAdd Open Scenesをクリックし、チェックが入っていることを確認してください。 追加したシーンを

f:id:ikeball:20210110121853p:plain

切り替え先のシーン名をLevel Nameに設定します。

f:id:ikeball:20210110131320p:plain

Box Collider 2D

ゴールとの当たり判定を取るためのコライダー。
見た目に合わせて調整します。
Box Collider 2DのEdit Colliderをクリックすると、Sceneビューに判定のサイズが表示されます。
見た目に合わせて、Offset, Sizeの設定を行います。

f:id:ikeball:20210110131619p:plain

MMAutoRotate

実行し、良く見るとデモのゴールは回転しています。
Rotation Speedで回転速度が設定されています。このコンポーネントを無効化すれば回転は止まります。

f:id:ikeball:20210110115413g:plain

Enemies

これは敵ですね。敵の動きや、敵のモデル変更については別の機会にまとめさせて頂きます。
ここでは敵の種類の紹介に留め、敵プレハブをコピーする形でステージ作成したいと思います。

f:id:ikeball:20210110132214p:plain

デモシーンには5体の敵が配置されていました。
踏んだら倒せる設定になっています。

f:id:ikeball:20210110132503p:plain

Ground(Terrain)

デモの初期状態では無効になっていますが、Terrainでのマップ作製もできそうです。
Terrainは大きなフィールドを作るときの仕組みです。 上の方にあるGroundを無効化し、Ground/Terrainを有効化してみました。

f:id:ikeball:20210110132905p:plain

切り替えて歩く分にはできたのですが、Terrainの地形と当たり判定が取れているわけではありませんでした。
別の機会に追加調査したいと思います。

f:id:ikeball:20210110133323g:plain

Items

コインや弾薬アイテムを入れる場所になります。
デモではコインのみの実装となっていました。

f:id:ikeball:20210110143156p:plain

ゲーム画面右上に小さくスコア表示がありました。

f:id:ikeball:20210110144933p:plain

コインで真新しいスクリプトCoin, Auto Respawanの二つです。

f:id:ikeball:20210110143535p:plain

Coin

Coin/Points To Addの値で入手するスコアを変更できます。

f:id:ikeball:20210110144406p:plain

また、Pick Feedbacksに設定されているフィードバックオブジェクトにて入手時のパーティクルSEの再生が行われています。
フィードバックオブジェクトは別の機会に詳細を調査したいと思います。

f:id:ikeball:20210110145302p:plain

Auto Respawn

Respawn On Player Respawn...プレイヤーが死亡時にコインが再配置されるようになります。

f:id:ikeball:20210110145415p:plain

Platforms

これはマップを形成している地形です。
Stockで紹介した内容と重複する内容はさけて、新しい項目のみまとめました。

f:id:ikeball:20210110145607p:plain

Ladder3D

梯子です。

f:id:ikeball:20210110150034p:plain

実際に使用する際にはこのプレハブをコピーして配置し、見た目を変更する形が良いと思います。
梯子の長さに合わせて当たり判定を調整したりします。

f:id:ikeball:20210110150420p:plain

1xpoint5-ramp

三角形のブロックです。

f:id:ikeball:20210110150719p:plain

RocketPlatform3D

上下する床(リフト)です。

f:id:ikeball:20210110152736g:plain

RocketPlatform3Dに設定されているMovingPlatformで上下の移動を行っています。
MovingPlatformReactorはパーティクルを出しているだけでした。

f:id:ikeball:20210110153050p:plain

Path Elementsがリフトの移動ルートの様です。
リフトを上に移動した後、右に移動するように設定してみました。
確認を早くするためMovement Speedの値を上げて早くしています。

f:id:ikeball:20210110154501p:plain

確認したところ上に行った後、右に行くこと確認できました。

f:id:ikeball:20210110154805g:plain

Cycle Optionの設定を確認してみました。
それぞれ下記を設定しています。

リフトの色 Cycle Option 概要
黄色 Back And Forth 設定したパスで最後まで行ったら逆に動く 0 → 1 → 2 → 1 → 0 → 1 ...
青色 Loop 設定したパスで最後まで行ったら先頭から再度動く 0 → 1 → 2 → 0 → 1 → 2 ...
赤色 Only Once 一度最後まで行ったら停止 0 → 1 → 2 → 停止
黒色 Stop At Bounds 最後まで行ったら停止、次に動くときは反対に動くらしい。
別の設定と一緒に使用するらしい。この設定は良く分かっておりません。

f:id:ikeball:20210110160720g:plain

Activationの項目を確認してみました。 Only Moves When Player Is Colliding...プレイヤーが乗っている間のみ動く。 Only Moves When Character Is Colling...プレイヤーか敵、NPCが乗っている間のみ動く。 Reset Position When Player Respawns...プレイヤーが死亡時に位置のリセットをするか。 Script Activated...有効な場合、他のスクリプトの影響のみ動作するようになる。 Start moving When Player is Colliding...プレイヤーが一度乗るまで動き出さない。

RetroPortalBlue/RetroPortalOrange

ワープになります。

f:id:ikeball:20210110162250g:plain

Teleporterのコンポーネントはとてつもない項目数があり全部を載せることができず、、
下の方にDestinationと言う設定がありますので、ここに飛び先のオブジェクトを設定します。
他の項目については別の機会に調査致します。

f:id:ikeball:20210110164343p:plain

ステージ作成

調べたことをもとに今回は雪をテーマにマップを作製してみます。

ステージ作成の流れ

順番は前後しても問題ありません。
自分なりのやり易い方法を見つけてください。
私の場合、雰囲気重視したいのでSkyboxの設定などから行っています。

  1. シーンの用意
  2. Groundの配置 ... マップの広さの目途を付けます。
  3. LevelStart/GateToNextLevel ... スタート地点、ゴール地点の設定を行います。
  4. GateToNextLevel遷移先の設定 ... 接続先は初めに設定するのが楽です。
  5. シーンの登録 ... BuildSettingsに追加したシーンを登録します。
  6. Platforms ... 大雑把に配置したあと、細かい部分の調整を行っていきます。配置した動かないオブジェクトはStatic設定にします。
  7. ギミック配置 ... ワープやリフトなど設定します。
  8. アイテム配置 ... コインなど設定します。
  9. 敵の配置 ... 敵を配置します。
  10. Skyboxの設定 ... ゲームは成り立ちますが雰囲気を重視したいため先に設定したい派です。
  11. Dustの設定(環境パーティクル)
  12. BGMの設定 ... BGMの設定をします。
  13. Backgroundの設定 ... 必要があれば背景の設定を行います。
  14. テストプレイ ... 動くようになってからは調整→プレイをひたすら繰り返していきます。

シーンのコピー

デモの構成をベースにステージ作成を行いたいと思います。
NewCorgi3Dのシーンをコピーし名前をStage1と変更しました。

f:id:ikeball:20210110165115p:plain

Groundの配置

ScaleのXを大きく設定し平ペッタ感を薄くなるようにし、マテリアルも専用のものを用意しテクスチャを差し替えました。

f:id:ikeball:20210110224353p:plain

使用したテクスチャは100+ Hand Painted Texturesのice_01_p15_pngを使用しました。
Rim ColorとDiffuseColorは完全な白色にしました。

f:id:ikeball:20210110224615p:plain

LevelStart/GateToNextLevel

LevelStartをスタート位置に合わせて、GateToNextLevelをゴールの位置に合わせます。

f:id:ikeball:20210110225855p:plain

GateToNextLevel遷移先の設定

接続先のシーンを設定します。他のシーンは用意できていないため現状はLevelSelectionのままとしています。
※遷移先のシーンはBuildSettingsで登録し、有効な状態である必要があります。

f:id:ikeball:20210110230322p:plain

Platforms

専用のブロックパーツを用意

PlatformsBuleを丸々コピーし、名前の変更しました。

f:id:ikeball:20210110231514p:plain

各ブロックは雪ブロック専用のマテリアルを用意し設定しました。
使用したテクスチャは100+ Hand Painted Texturessnowy_rock_01_p9を使用しました。

f:id:ikeball:20210110231152p:plain

良く使うパーツはプレハブ化

この先っちょの三角形は多用したかったためプレハブ化し配置しました。

f:id:ikeball:20210110230706p:plain

三角ふたつと、四角4つを配置しただけのプレハブになります。

f:id:ikeball:20210110230836p:plain

橋の様なオブジェクト

途中橋のような形で使用したオブジェクトもScaleと専用のマテリアルを用意し設定したものになります。

f:id:ikeball:20210110231651p:plain

YのScale値を小さくして板のような形にしています。
他とは別のマテリアルを設定したいため、新規マテリアルを設定しました。
使用したテクスチャは100+ Hand Painted Textureswood_17_p6を使用しました。
テクスチャが間延びしていたので、Tilingの設定も調整しました。

f:id:ikeball:20210110232310p:plain

Static化

配置した動かないオブジェクトはStatic設定にします。 新しくコピー、配置した際に設定が抜けたものが混ざる可能性があります。

f:id:ikeball:20210110231757p:plain

コピー配置

ここまで準備ができたら、コピー&移動を繰り返しマップの形を作成しました。

f:id:ikeball:20210110232640p:plain

ギミック配置

今回はギミックの配置は行いませんでした。

アイテム配置

デモコインの位置を変更、コピーして配置を繰り返しました。

f:id:ikeball:20210110232733p:plain

敵の配置

デモで用意されていたモンスターをそのまま流用しました。
バーバリアンは何となくイメージが違ったので消し、それとなく配置を行いました。

f:id:ikeball:20210110232840p:plain

Skyboxの設定

デモシーンのステージ構成/スカイボックスの変更にてスカイボックスの設定方法を記載しています。 AllSky - 200+ Sky / Skybox SetCartoon Base NightSky_Camを設定しました。

Dustの設定(環境パーティクル)

雪が降ったような表現は、デモの状態からパーティクルの発生方向を逆にして、発生位置を調整する形で行いました。

f:id:ikeball:20210110225329p:plain

デモの状態から大きくは変更していませんが、雪っぽい感じは出せているのではないでしょうか。

f:id:ikeball:20210110225106g:plain

BGMの設定

BackgroundMusicのオブジェクトを選択し、Background Music/Sound Clipの設定を行うことでBGMの変更ができます。

f:id:ikeball:20210110201054p:plain

BGMの音量はGameManagersのオブジェクトを選択し、Sound Manager/Music Volumeから設定ができます。
イメージに近かったGame Music Pack - SUITErpg_18_loopを使用しました。

f:id:ikeball:20210110201425p:plain

Backgroundの設定

Corgi3DCloud/Corgi3DHillそれぞれにマテリアルを用意し色味の調整を行いました。

f:id:ikeball:20210110233348p:plain

確認/テストプレイ

一通り設定ができたので確認してみます。

f:id:ikeball:20210110233544p:plain

f:id:ikeball:20210110233625p:plain

f:id:ikeball:20210110233729p:plain

おわりに

ステージ作成奥が深いですね。今回は角ばったパーツにテクスチャ差し替えで作成しましたが、Terrainを使って作成はできないか、もっとカッコイイマップはできないかなど模索していきたいと思います。
駆け足気味にまとめてしまったので、敵の設定、フィードバックについて、ステージごとのスカイボックスの変更の仕方なども順番にまとめて行きたいと思います。
今回調査を次回の機会とした項目も調査していきます。
確認頂きありがとう御座いました。

関連記事

ikeball.hatenablog.com

ikeball.hatenablog.com

ikeball.hatenablog.com