回答編集履歴

2

呼び出し元での管理の具体例を追加

2019/08/06 12:44

投稿

Ram.Type-0
Ram.Type-0

スコア424

test CHANGED
@@ -71,3 +71,93 @@
71
71
  恐らくはスペースキーに割り当てられたジャンプなどを無効化したいのだと思います。
72
72
 
73
73
  今後のバグ軽減のためにも、Input.GetKey(KeyCode.Space)を呼び出している側のスクリプトで無効化判定を行ったほうがより良いと思います。
74
+
75
+
76
+
77
+ 追記
78
+
79
+ Input.GetKeyの呼び出し元での管理とは具体的にはこんな感じのものです。
80
+
81
+ ```C#
82
+
83
+
84
+
85
+
86
+
87
+ sing UnityEngine;
88
+
89
+ using System.Collections.Generic;
90
+
91
+ public class PlayerActionManager:MonoBehaviour
92
+
93
+ {
94
+
95
+
96
+
97
+ List<PlayerAction> disabledActions = new List<PlayerAction>();
98
+
99
+
100
+
101
+
102
+
103
+ void OnCollisionEnter(Collision collision)
104
+
105
+ {
106
+
107
+ StartCoroutine(DisableAction(PlayerAction.Jump,3f));
108
+
109
+ }
110
+
111
+
112
+
113
+ IEnumerator DisableAction(PlayerAction action,float duration)
114
+
115
+ {
116
+
117
+ disabledActions.Add(action);
118
+
119
+ yield return new WaitForSeconds(duration);
120
+
121
+ disabledActions.Remove(action);
122
+
123
+ }
124
+
125
+ void Update()
126
+
127
+ {
128
+
129
+ if(!disabledActions.Contains(PlayerAction.Jump) && Input.GetKeyDown(KeyCode.Space))
130
+
131
+ {
132
+
133
+ Jump();
134
+
135
+ }
136
+
137
+ }
138
+
139
+
140
+
141
+ void Jump()
142
+
143
+ {
144
+
145
+ //.......
146
+
147
+ }
148
+
149
+ }
150
+
151
+ public enum PlayerAction
152
+
153
+ {
154
+
155
+ Jump,
156
+
157
+ Crouch,
158
+
159
+ Punch
160
+
161
+ }
162
+
163
+ ```

1

適切なデザインパターンについての内容を追加

2019/08/06 12:44

投稿

Ram.Type-0
Ram.Type-0

スコア424

test CHANGED
@@ -59,3 +59,15 @@
59
59
  一定時間後にRemoveを行うような処理をすれば一定時間だけSpaceキーを無効化することができます。
60
60
 
61
61
  その上でInput.GetKeyの代わりにInputProxy.Instance.GetKeyを用いれば問題ないでしょう。
62
+
63
+
64
+
65
+ 追記
66
+
67
+
68
+
69
+ ですが、そもそも本当にあなたがやりたいのはスペースキーを一定時間機能不全に陥らせることなのでしょうか?
70
+
71
+ 恐らくはスペースキーに割り当てられたジャンプなどを無効化したいのだと思います。
72
+
73
+ 今後のバグ軽減のためにも、Input.GetKey(KeyCode.Space)を呼び出している側のスクリプトで無効化判定を行ったほうがより良いと思います。