のぼるゲーム開発備忘録

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

【Unity】【Corgi Engine】画面遷移/ステージ選択の確認

f:id:ikeball:20210220091844p:plain

はじめに

今回はCorgi Engineの画面遷移・ステージ選択について確認してみました。

ここが分かればタイトル → マップ選択 → ゲーム画面 → マップ選択 ... と言ったサイクルも作ることができます。

 

CorgiEngineでの遷移で大事なのはLevelSelectorです。

ゴールで遷移先を設定する場合はFinishLevelでした。

スクリプトを扱う場合はLevelManagerが肝になります。

使用アセット

Corgi Engine - 2D + 2.5D Platformer

確認環境

Unity 2019.4.16f1

f:id:ikeball:20210220152057g:plain

ステージ選択

LevelSelectionの確認

LevelSelectionの遷移がどのように行われているか確認しました。

f:id:ikeball:20210220093128g:plain

UICamera/Canvas/Mask/MMCarousel/Content/Retro1/ButtonAlt に付いている

LevelSelector コンポーネントで遷移先を指定しています。

 

LevelName ... 遷移先のシーン名

※遷移先のシーンはBuildSettingsで登録されている必要があります。

シーン登録のやり方に登録方法をまとめています。

f:id:ikeball:20210220102113p:plain

LevelSelector.GoToLevel はボタンの反応に合わせて呼び出されています。

ButtonAlt/Container/Background に付いている MMTouchButton にて設定が行われています。

ButtonPressedFirstTime ... ボタンが押されたときの呼び出し

f:id:ikeball:20210220102010p:plain

自作ボタンでやってみた

Unityのボタンを配置しLevelSelector.GoToLevelを呼び出してみました。

f:id:ikeball:20210220114240g:plain

UICamera/Canvas/ButtonRight/Mask に UI/Button を追加します。

f:id:ikeball:20210220114108p:plain

ボタンの位置・サイズを調整しします。

①Buttonを選択

②OnClickの+を押します

③ButtonAltをドラッグアンドドロップで追加します

④▼からLevelSelector.GoToLevelを選択します

f:id:ikeball:20210220131429p:plain

設定はこれで完了となります。
実行して確認してみてください。

LevelSelectionMap の確認

LevelSelectionMapのシーン選択方法を確認してみました。

ここで主要なスクリプトは3つとなります。

LevelMapCharacter ... 入力を受けてキャラクターの移動、決定の入力受付

LevelMapPathElement ... マップの接続先定義

LevelSelector ... 遷移先のシーン、シーン切り替え

f:id:ikeball:20210220092848g:plain

LevelMapCharacter

f:id:ikeball:20210220132820p:plain

PlayerID ... プレイヤーの操作定義どれを使うか変更する理由はありませんが。

 2プレイヤー同時選択等の場合の2P側はPlayer2となります。

CharacterSpeed ... マップ上でのキャラクター移動スピード

StartPoint ... 開始時の位置

CharacterIsFacingRight ... 初期向きの扱いが右か

f:id:ikeball:20210220133114g:plain

CharacterSpeed = 10 の設定

LevelMapPathElement

マップの各ポイントです。

ポイントは停止ポイント自動移動ポイントの2タイプあります。

AutomaticMovement ... true 自動移動ポイント、 false 停止ポイント

PossibleDirections ... 接続先の場所

停止ポイント

AutomaticMovement が false

f:id:ikeball:20210220133727p:plain

自動移動ポイント

AutomaticMovement が true

f:id:ikeball:20210220134357p:plain

新しい地点を繋げてみた

PE1とPE2を接続してみました。

地点は斜めでも問題なく動くみたいです。

f:id:ikeball:20210220134628g:plain

PE1を選択し、DownへPE21をドラッグアンドドロップで設定

f:id:ikeball:20210220135057p:plain

PE21を選択し、UpへPE1をドラッグアンドドロップで設定

f:id:ikeball:20210220135223p:plain

設定は以上となります。

LevelSelector

f:id:ikeball:20210220135727p:plain

LevelName ... 遷移先のシーン名

※遷移先のシーンはBuildSettingsで登録されている必要があります。

シーン登録のやり方に登録方法をまとめています。

LevelMapPathElement/AutomaticMovementがfalseの地点にLevelSelectorを追加し遷移先のシーン名を記載します。

ステージクリア遷移

Assets/CorgiEngine/Demos/Corgi3D/NewCorgi3D のシーンで確認を行っています。

FinishLevelというスクリプトで遷移が行われていました。

f:id:ikeball:20210220142003g:plain

FinishLevel

f:id:ikeball:20210220142234p:plain

LevelName ... 遷移先のシーン名

※遷移先のシーンはBuildSettingsで登録されている必要があります。

シーン登録のやり方に登録方法をまとめています。

遷移先をLevelSelectionMapに変更してみた

マップ選択画面に戻ることができました。

f:id:ikeball:20210220142802g:plain

FinishLevelのLevelNameをLevelSelectionMapに設定

ゲームオーバー遷移

デモではプレイヤーの体力が0になった場合、リスタートされます。

これをタイトルやロード画面など別のシーンに行いたい場合、どうしたら良いかを確認しました。

f:id:ikeball:20210220093615g:plain

GameManagerにゲームオーバー時に遷移するシーンの設定がありました。

 

f:id:ikeball:20210220150208p:plain

MaximumLives ... 最大残機数。ゲームオーバー遷移を行う場合必ず1以上を設定

CurrentLives ... 現在の残り残機数

GameOverScene ... ゲームーバー時の遷移先シーン名

f:id:ikeball:20210220150030g:plain

 設定を行うと死亡し、残機が無くなると画面遷移します。

体力が0になった瞬間に遷移が走っているのは気になりますね。。。

 

LevelManager

おまけ:スクリプト扱います

Assets/CorgiEngine/Demos/Corgi3D/NewCorgi3D のシーンで確認を行っています。

LevelManagerとは何かですが、これがCorgiEngineでゲームの進行を管理しています。

f:id:ikeball:20210220144012p:plain

LevelManagerのスクリプトにGotoLevelと言うメソッドがあります。

f:id:ikeball:20210220144223p:plain

LevelSelector、CharacterSelector、FinishLevelも全てLevelManagerのGotoLevel()を呼び出しています。

f:id:ikeball:20210220144344p:plain

スクリプトから直接画面遷移を呼び出す場合は、下記を書けば画面が切り替わります。

LevelManager.Instance.GotoLevel( 遷移先のシーン名 );

f:id:ikeball:20210220144559p:plain

※遷移先のシーンはBuildSettingsで登録されている必要があります。

シーン登録のやり方に登録方法をまとめています。

シーン登録のやり方

 登録対象シーンを開いた状態でUnityメニュー → File → Build Settings... を選択します。

f:id:ikeball:20210220104110p:plain

AddOpenScenes を押すと、開いているシーンが登録されます。

CorgiEngineの場合、シーンを名前で指定するため登録順番はあまり関係ありません。

一番上のシーンが起動シーンとなるのでそこだけ要注意です。

f:id:ikeball:20210220103818p:plain

おわりに

CorgiEngineでのシーン切り替えに大事なのはLevelSelectorだと感じました。さっそく自作ゲームに組み込んで各遷移を組み立てたいと思います。

少しでもお役に立つことがあれば幸いです。

ここまで確認頂きありがとう御座いました。

関連記事

ikeball.hatenablog.com

 

ikeball.hatenablog.com