敵の攻撃を食らったら一定時間、操作できないようにする。…とか
キャラクターの行動ターンが終わったら、一定時間、入力を受け付けない。…とか
そんな事ってありますよね?
Inputの受け付けをスクリプトでON/OFFする方法
今回はスクリプトでInputの受付を管理しようという趣旨です。
こういう感じのを目指しました。
- boolで管理するより状態を理解しやすい
- 一度作ればどのスクリプトからでも呼べる
イメージはこんな感じです。
つまりは
- 画面を触っている間は操作を受け付ける
- 指が離れたらGameManagerに自身のスクリプトを無効化してもらう
- 引数で指定した秒数後にスクリプトが有効化される
という流れになっています。
スクリプト(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できない)
}
}
}
おしまい。
間違ってたらすいません。
コメント