注意
本記事で掲載されている動作の実装方法及びプログラムのソースコードは最適な方法ではない可能性があります。今後不具合等が判明した場合には修正及び改良をおこなう可能性があります。
また今後自分で同機能を実装する場合の参考にする可能性もあるためソースコードだけではなく説明しつつ記事を進めていきます。
Unityによる自作ゲーム開発進捗その18になります!
今回はメニュー画面を作成して戦闘画面への遷移を実装しました。
メニューはボタン1つだけの画面になっており、戦闘画面へ遷移する際に数値の受け渡しが出来るようにしました。
新しいスクリプトを1つ追加します。
以下にソースコードを掲載します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class BattleReady : MonoBehaviour{
public void BattleStart() {
SceneManager.sceneLoaded += MenuToBattleExchange;
SceneManager.LoadScene("ForestScene"); // タスク1
}
private void MenuToBattleExchange(Scene a_scene, LoadSceneMode a_mode) {
var l_object = GameObject.Find("Player"); // タスク2
var l_script = l_object.GetComponent<PlayerController>(); // タスク2
l_script.PlayerSpeedSet(0.1f); // タスク2
SceneManager.sceneLoaded -= MenuToBattleExchange;
}
}
/*
[規則]
p_ 外部アクセス
m_ メンバー変数
l_ ローカル変数
a_ 引数
e_ 列挙型
[説明]
[バージョン]
2021-05-05 シーン遷移と仮数値の受け渡し
[タスク]
タスク1 選択されたステージによる分岐が必要
タスク2 数値受け渡しテスト用
*/
public void BattleStart() {
SceneManager.sceneLoaded += MenuToBattleExchange;
SceneManager.LoadScene("ForestScene"); // タスク1
}
ボタンを押した動作内にシーン遷移前に呼ばれるイベント(MenuToBattleExchange)を追加するようにしました。
private void MenuToBattleExchange(Scene a_scene, LoadSceneMode a_mode) {
var l_object = GameObject.Find("Player"); // タスク2
var l_script = l_object.GetComponent<PlayerController>(); // タスク2
l_script.PlayerSpeedSet(0.1f); // タスク2
SceneManager.sceneLoaded -= MenuToBattleExchange;
}
イベント内ではシーン遷移先のプレイヤーオブジェクトを取得して移動速度を設定する関数を呼び出しています。
移動速度設定は数値の受け渡し確認用となっています。
シーンで扱う数値や保存データも含めて今回は仕様を決めてみました。
今回の仕様で今後実装していく予定ですがゲームとして不都合な面が出た場合にまた変更するかもしれません。
ゲームの大きな流れとしてはメニューシーンと戦闘シーンを切り替えて進みます。
メニューシーンが呼び出された際には毎回保存されているデータを読み込むようにして、強化などをおこなった際には対応するデータを自動保存する。
戦闘シーンへの切り替えにはキャラクターのステータス及び配置やステージの数値を受け渡すようにしてグローバルな変数で管理はしない。
戦闘終了時にはステージのクリア有無や獲得したお金のデータのみを自動保存するようにしてメニュー画面へ切り替える。