現在Unityを使用して2D RPGの会話イベント発生時のプレイヤーキャラの移動制限をプログラムで作成しています。
その際に、下記の方法で実現している移動制限の解除がうまくいかず、プレイヤーキャラへの移動入力が受け付けられないというバグが発生しています。
・ゲームの状況を把握するオブジェクト(以降GManagerと記載)をゲーム開始時にインスタンス化して作成[下記プログラム1をご参照ください]
・会話イベント発生時にGManagerのisStopをtrueにする(GManager.instance.isStop = true;により状態を変更)
・プレイヤーキャラの移動など制限したいプログラムはif(!GManager.instance.isStop){}内に記述する。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class GManager : MonoBehaviour { public static GManager instance = null; public bool isStop = false; void Awake() { if (instance == null) { instance = this; DontDestroyOnLoad(this.gameObject); } else { Destroy(this.gameObject); } } }
移動制限の解除は下記の手法で実現しています。
・Gmanagerの子オブジェクト(普段は非アクティブ化)に下記のプログラム2を持たせる。
・会話イベント終了のタイミングでプログラム2を持った子オブジェクトをアクティブ化
using System.Collections; using System.Collections.Generic; using UnityEngine; public class GManagerStopEnd : MonoBehaviour { [Header("ストップ解除オブジェクト")] public GameObject ThisObj; //Inspectorからこのプログラムを持った子オブジェクトを指定 // Update is called once per frame void Update() { GManager.instance.isStop = false; ThisObj.SetActive(false); } }
発生しているバグの状況は下記になります。
・ゲーム開始(GManagerのインスタンス化)→シーン変更(スタートのシーンから会話イベントのあるシーンに移行)
→会話イベント発生(プレイヤーキャラの移動制限の付与)→会話イベント終了(プレイヤーキャラの移動制限の解除)
上記のフローにおいて、プレイヤーキャラの移動制限が解除されない。
・デバッグとして、会話イベントが発生するシーンからゲームを開始した場合、会話イベント終了後のプレイヤーキャラの移動制限は解除される。
シーンの変更を挟まなければプレイヤーキャラの移動制限が解除されるため、別シーンでインスタンス化したオブジェクトへのアクセスが
うまくできていないことが原因と考えています。
解決方法がわかる方がいらっしゃれば、ご指導ご鞭撻のほど何卒よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー