取得した電球を使うと電気が点灯する処理が作成されたが、
LightstandPanel以外の場所でも使えてしまうので、LightstandPanelの場面で電気を使うようにする
###各パネルを表示するときに、現在のパネルが何かをチェックする
GameManagerで下記を追加する
◇変数currentPanelを列挙型で作成し、ROOMパネルで初期化する
public enum PANEL
{
ROOM,
LIGHT_STAND,
DRAWER,
PC
}
// 現在表示しているパネル
public PANEL currentPanel = PANEL.ROOM;
◇ボタンを押したら、現在のパネルをcurrentPanelに取得し、該当するパネルを表示する
バックボタンが押されたら、currentPanelをROOMに戻し、他のパネルを非表示にする
// ボタンを押したら該当するパネルを表示
public void OnClickLightStandTrigger()
{
currentPanel = PANEL.LIGHT_STAND;
lightStandPanel.SetActive(true);
}
public void OnClickDrawerTrigger()
{
currentPanel = PANEL.DRAWER;
drawerPanel.SetActive(true);
}
public void OnClickPCTrigger()
{
currentPanel = PANEL.PC;
pcPanel.SetActive(true);
}
// ボタンを押したらパネルを全て非表示
public void OnClickBackTrigger()
{
currentPanel = PANEL.ROOM;
lightStandPanel.SetActive(false);
drawerPanel.SetActive(false);
pcPanel.SetActive(false);
}
###アイテムを電気スタンドが表示されている時だけ使用する
◇現在のパネルが電気スタンドのときに、アイテムを使う
ItemBoxManagerでGameManagerを取得し、UseItem()を書き換える
[SerializeField] GameManager gameManager;
// アイテムの使用
public void UseItem(int index)
{
if ( gameManager.currentPanel == PANEL.LIGHT_STAND
&& itemList[index] == ITEM.LIGHT_BULB) //現在のパネルが電気スタンドで、かつ使用するアイテムが電球だったら
{
lightStandManager.LightSwitch(true); //電気をつける
itemList[index] = ITEM.NONE; // アイテムを使用したので空にする;
itemBoxImages[index].sprite = null;
}
}
InspecterでItemBoxPnelオブジェクトのItemBoxManagerスクリプトにGameManagerが出ているので、GameManagerを設定する
関数名はUseItem()で、Inspecterの「OnClick()」で設定しているので、
クリックしたときに実行される。
##教材
Unityゲームスタジオ スタジオしまづ
【Unity】初心者からの脱出!? 脱出ゲームの作り方 その7 特定の条件でアイテムを使用
https://youtu.be/ualq_a3rnQc