unity初心者のものです。
現在個人でゲームを製作しているのですが、ゲームのギミックの一つで障害物にぶつかると一定時間(5秒ほど)スペースキーの取得を無効にするような機能を探しています。
衝突の取得はoncollisionenterで良いのですが、スペースキーの取得を無効にする書き方が分かりません。
初心者質問ですみません。よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
Unityに組み込まれたInput.GetKeyを無効化する方法はありません。
ですが、Input.GetKeyを代行するようなプロクシクラスを作ることによって恐らく要求は満たせるでしょう。
C#
1using UnityEngine; 2using System.Collections.Generic; 3public class InputProxy:MonoBehaviour 4{ 5 public static InputProxy Instance{get; private set;} 6 public List<KeyCode> disabledKeys = new List<KeyCode>(); 7 void Start() 8 { 9 Instance = this; 10 } 11 void OnDestroy() 12 { 13 Instance = null; 14 } 15 public bool GetKey(KeyCode key) 16 { 17 return !disabledKeys.Contains(key)&& Input.GetKey(key); 18 } 19}
このようなクラスを作成し、このスクリプトをアタッチしたGameObjectをシーンに配置します。
この状態で、
OnCollisionEnterでInputProxy.Instance.disabledKeys.Add(KeyCode.Space)を行い、
一定時間後にRemoveを行うような処理をすれば一定時間だけSpaceキーを無効化することができます。
その上でInput.GetKeyの代わりにInputProxy.Instance.GetKeyを用いれば問題ないでしょう。
追記
ですが、そもそも本当にあなたがやりたいのはスペースキーを一定時間機能不全に陥らせることなのでしょうか?
恐らくはスペースキーに割り当てられたジャンプなどを無効化したいのだと思います。
今後のバグ軽減のためにも、Input.GetKey(KeyCode.Space)を呼び出している側のスクリプトで無効化判定を行ったほうがより良いと思います。
追記
Input.GetKeyの呼び出し元での管理とは具体的にはこんな感じのものです。
C#
1 2 3sing UnityEngine; 4using System.Collections.Generic; 5public class PlayerActionManager:MonoBehaviour 6{ 7 8 List<PlayerAction> disabledActions = new List<PlayerAction>(); 9 10 11 void OnCollisionEnter(Collision collision) 12 { 13 StartCoroutine(DisableAction(PlayerAction.Jump,3f)); 14 } 15 16 IEnumerator DisableAction(PlayerAction action,float duration) 17 { 18 disabledActions.Add(action); 19 yield return new WaitForSeconds(duration); 20 disabledActions.Remove(action); 21 } 22 void Update() 23 { 24 if(!disabledActions.Contains(PlayerAction.Jump) && Input.GetKeyDown(KeyCode.Space)) 25 { 26 Jump(); 27 } 28 } 29 30 void Jump() 31 { 32 //....... 33 } 34} 35public enum PlayerAction 36{ 37 Jump, 38 Crouch, 39 Punch 40}
投稿2019/08/06 12:14
編集2019/08/06 12:44総合スコア424
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/06 12:27
2019/08/06 12:46
2019/08/06 13:08