【Unity6】2D脱出ゲームの作り方⑨|選択したアイテムを使ったギミックの実装①(木の棒を使う)

木の棒を使って蛇口ハンドルを取り出す画像 ゲームの作り方
木の棒を使って蛇口ハンドルを取り出す

🎮 Unity6で作る「1シーン完結 2D脱出ゲーム講座」第9回です。

前回は、アイテムを選択できる仕組みを実装しました。
今回は、実際に 「木の棒」を選択してフェンス奥の蛇口ハンドルを手前に取り出すギミック を作っていきます。

📌 前回の記事はこちら

🎥 今回の動作例動画

ギミックの流れ

  1. 東の背景をクリックしてフェンスの拡大画面へ
  2. フェンス奥の蛇口ハンドルをクリック → 未選択では反応なし
  3. 木の棒を選択状態にしてハンドルをクリック
  4. 木の棒で掻き出すアニメーションが再生
  5. 手前に移動したハンドルをクリックして取得

画面構成(Hierarchy)

Stage
├─North
├─East
├─FenceZoom
|   ├─FaucetHandle_Back(奥)
|   ├─FaucetHandle_Front(手前)
|   ├─StickUse_1(木の棒アニメ)
|   ├─StickUse_2
|   └─StickUse_3

  • FenceZoom…フェンスの拡大画面
  • FaucetHandle_Back…奥にあるハンドル
  • FaucetHandle_Front…手前に出てきた後のハンドル
  • StickUse_x…木の棒アニメーション用画像

フェンス拡大画面のセットアップ

  1. FenceZoom の背景画像を設定
  2. BackgroundType に追加
  3. BackgroundManager のインスペクターでアタッチ
【Unity6】2D脱出ゲームの作り方⑨|フェンスの拡大画像

東の背景からフェンス拡大へ遷移

East オブジェクトに ZoomObject をアタッチし、ボタンを追加

  • ボタンの「OnClick」に ZoomObject の OnClick() を設定
  • クリックすると FenceZoom に切り替わる

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

蛇口ハンドルと木の棒アニメーションを配置

● 奥と手前の蛇口ハンドル

  • 奥(FaucetHandle_Back)…最初にクリックする対象
  • 手前(FaucetHandle_Front)…木の棒で動かしたあとに見える状態
【Unity6】2D脱出ゲームの作り方⑨|フェンス奥にある蛇口ハンドル画像

● 木の棒の使用アニメーション画像

  • StickUse_1
  • StickUse_2
  • StickUse_3
    (必要枚数だけ追加OK)
【Unity6】2D脱出ゲームの作り方⑨|木の棒を使って蛇口ハンドルを取り出す画像

木の棒を使う仕組み(StickRetrieve.cs)

using UnityEngine;
using System.Collections;

public class StickRetrieve: MonoBehaviour
{
public GameObject[] stickAnimationImages;//木の棒を使うアニメーション
public GameObject faucetHandle_Back; //奥のハンドル
public GameObject faucetHandle_Front;//手前のハンドル
public ItemData requiredItem;//必要アイテム

private bool isCompleted = false;

private void Start()
{
faucetHandle_Back.SetActive(true);
faucetHandle_Front.SetActive(false);

foreach (var image in stickAnimationImages)
{
image.SetActive(false);
}
}

public void OnClick()
{
if (isCompleted) return;

//選択中のアイテム取得
ItemData selected = ItemBoxManager.Instance.GetSelectedItem();

//正しいアイテム(木の棒)ならアニメ再生
if (selected == requiredItem)
{
StartCoroutine(PlayStickAnimation());
}
}

private IEnumerator PlayStickAnimation()
{
isCompleted = true;
BackgroundManager.Instance.HideArrows();

faucetHandle_Back.SetActive(false);

// アニメ順再生
foreach (var image in stickAnimationImages)
{
image.SetActive(true);
yield return new WaitForSeconds(0.5f);
image.SetActive(false);
}

faucetHandle_Front.SetActive(true);

ItemBoxManager.Instance.DeSelectItem();
BackgroundManager.Instance.ShowBackArrows();
}
}

インスペクターの設定

● FenceZoom(背景)に StickRetrieve を追加

以下を紐付ける:

  • StickAnimationImages
  • FaucetHandle_Back
  • FaucetHandle_Front
  • RequiredItem(木の棒の ScriptableObject)

● 奥の蛇口ハンドル

  • Button を追加
  • OnClick に StickRetrieve.OnClick() を設定

● 手前の蛇口ハンドル

  • ItemPickup スクリプトを追加
  • ScriptableObject を設定
  • ボタンの OnClick → ItemPickup.OnClick


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

BackgroundManager.scに機能追加

アニメ中に画面移動されないように制御:

public void HideArrows()
{
backButton.SetActive(false);
}

public void ShowBackArrows()
{
backButton.SetActive(true);
}

ItemBoxManager.scに機能追加

▼選択中のアイテムを取得するメゾット

public ItemData GetSelectedItem()
{
if (currentSlot != null)
return currentSlot.currentItem;

return null;
}

▼アイテム選択を解除するメゾット

public void DeSelectItem()
{
currentSlot.Deselect();
currentSlot = null;
}

動作確認チェック

✔ 東の背景クリック → フェンス拡大へ
✔ アイテム未選択で奥のハンドル → 無反応
✔ 木の棒選択でクリック → アニメ再生
✔ ハンドルが手前に出現
✔ 手前のハンドルをクリックで取得

まとめ

今回は、選択したアイテムを使って動くギミックを実装しました。
脱出ゲームらしさが一気に強くなる重要なポイントです!

✅次回は、🔧 取り出した蛇口ハンドルを使って、水道から水を出すギミック
を実装します👇

コメント

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