【Unity】一定時間、操作を受け付けないようにする方法【C#】

この記事は約3分で読めます。

敵の攻撃を食らったら一定時間、操作できないようにする。…とか

キャラクターの行動ターンが終わったら、一定時間、入力を受け付けない。…とか

そんな事ってありますよね?

Inputの受け付けをスクリプトでON/OFFする方法

今回はスクリプトでInputの受付を管理しようという趣旨です。

こういう感じのを目指しました。

  • boolで管理するより状態を理解しやすい
  • 一度作ればどのスクリプトからでも呼べる

イメージはこんな感じです。





つまりは

  1. 画面を触っている間は操作を受け付ける
  2. 指が離れたらGameManagerに自身のスクリプトを無効化してもらう
  3. 引数で指定した秒数後にスクリプトが有効化される

という流れになっています。

スクリプト(GamaManager側)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameManager : MonoBehaviour
{
    private IEnumerator Inoperable(float i) // 操作を不能にする(引数の秒数間)
    {
        GameObject inputObj = GameObject.Find("InputManager");
        InputScript inputScript = inputObj.GetComponent<InputScript>();
        inputScript.enabled = false; // スクリプトを無効化
        yield return new WaitForSeconds(i); // 引数の秒数だけ待つ
        inputScript.enabled = true; // スクリプトを有効化
        yield break;
    }

    public void CallInoperable(float i)
    {
        StartCoroutine("Inoperable", i); // 他のスクリプトから呼び出す用
    }
}

スクリプト(Inputの受け付けをする側)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class InputScript : MonoBehaviour
{
    GameObject gameManagerObj;
    GameManager gameManager;

    private void Start()
    {
        gameManagerObj = GameObject.Find("GameManager");
        gameManager = gameManagerObj.GetComponent<GameManager>(); // スクリプトを取得
    }

   private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            // 画面タッチ中は何かが起きる
        }
     
     if (Input.GetMouseButtonUp(0)) // ボタン離した時の判定
        {
       gameManager.CallInoperable(2.0f); // 2 秒間 このスクリプトを無効にする(Inputできない)
     }
    }
}

おしまい。

間違ってたらすいません。

コメント

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