【Unity6】2D脱出ゲームの作り方⑩|選択したアイテムを使ったギミックの実装②(水道の水を流す)

アイテム「ハンドル」を使って水を流すギミック画像 ゲームの作り方
アイテム「ハンドル」を使って水を流すギミック

📘 前回(第9回)はこちら👇

🎮 Unity6 を使った「1シーン完結 2D脱出ゲーム講座」第10回です。
今回は、アイテム 「蛇口ハンドル」 を使って、水道の水を流すギミックを実装します。

今回の処理は以下の2ステップで動きます。

ハンドル装着済み → クリックで水の ON / OFF を切り替え

手洗い台(Washbasin)をクリック → ハンドルを取り付ける処理
 ※アイテム「蛇口ハンドル」を選択している場合のみ反応

🎥 動作例動画

Hierarchy(画面構成)

West
 ├─ Washbasin
Washbasin(背景)
 ├─ Handle(透明ボタン)
 ├─ HandleSet(取り付け後のハンドル画像)
 └─ Water(水が流れる画像)

● West に手洗い台の背景画像を追加

背景には ハンドルが付いていない状態 の画像を設定しておきます。

【Unity6】2D脱出ゲームの作り方⑩|ハンドルが付いてない状態の手洗い場画像

ここへ、後から表示/非表示を切り替える、

  • 取り付け後のハンドル画像(HandleSet)
  • 水が流れている画像(Water)

を子オブジェクトとして追加します。

背景切り替えの設定

  • BackgroundType.cs に「Washbasin」を追加
  • BackgroundManager のインスペクターでアタッチ

Washbasin にズーム機能を追加

  1. 背景 West の手洗い台に ZoomObject をアタッチ
  2. Zoom To を Washbasin に設定
  3. Button コンポーネントを追加し、ZoomObject.OnClick を設定

→ 手洗い場をクリックすると、拡大画面に切り替わります。

📌 詳しいやり方はこちら👇
2D脱出ゲームの作り方③|オブジェクトをクリックして拡大画面に切り替える方法

FaucetController.cs(蛇口の制御)

using UnityEngine;

public class FaucetController : MonoBehaviour
{
[SerializeField] private GameObject handleSet; // 取り付け後のハンドル画像
[SerializeField] private GameObject water;// 水が流れる画像

private bool isHandleInstalled = false;
private bool isWaterRunning =false;

public ItemData requiredItem; //必要アイテム

void Start()
{
handleSet.SetActive(false);
water.SetActive(false);
}

// — 蛇口をクリックした時呼ばれる —
public void OnClickFaucet()
{
// まだハンドルがついてない場合 → アイテムが正しければ装着
if (!isHandleInstalled)
{
ItemData selected = ItemBoxManager.Instance.GetSelectedItem();

if (selected == requiredItem)
{
InstallHandle();
ItemBoxManager.Instance.RemoveItem(selected);
}
return;
}

// ハンドル装着済み → 水の ON/OFF を切り替え
if (!isWaterRunning)
{
StartWaterFlow();
}
else
{
StopWaterFlow();
}
}

private void InstallHandle()
{
isHandleInstalled = true;
handleSet.SetActive(true);
}

// — 水を出す—
private void StartWaterFlow()
{
isWaterRunning = true;
water.SetActive(true);
}

// — 水を止める —
private void StopWaterFlow()
{
isWaterRunning = false;
water.SetActive(false);
}
}

インスペクター設定

✔ Washbasin(背景)に FaucetController をアタッチ

  • HandleSet … 取り付け後のハンドル画像
  • Water … 水が流れる画像
  • RequiredItem … ScriptableObject の「FaucetHandle」を設定

✔ Washbasin(背景)に Button コンポーネントを追加

クリックイベントに OnClickFaucet() を設定。

📌 スクリプタブルオブジェクトについてはこちら👇
2D脱出ゲームの作り方⑥|アイテムスロットの作成とデータベース管理

ItemBoxManager.scに機能追加

使用したアイテムをアイテムボックスから削除する処理を追加します。

public void RemoveItem(ItemData item)
{
// リストから削除
if (items.Contains(item))
{
items.Remove(item);
currentSlot.ClearItem();
}
}

動作チェック

  • 「蛇口ハンドル」未選択で水道をクリック
    → 何も起きない
  • 「蛇口ハンドル」選択 → 水道クリック
    → ハンドルが取り付けられる
  • アイテムボックスから「蛇口ハンドル」が消える
  • ハンドル装着後、水道クリックで
     → 水が流れる / 止まる が切り替わる

まとめ

今回は、アイテム「蛇口ハンドル」を使って
水道の水を出すギミックを実装する方法 を解説しました。

次回は、効果音をまとめて管理できる SEマネージャーを作成 します。

コメント

タイトルとURLをコピーしました