質問編集履歴

1

文章の追記

2022/01/16 10:13

投稿

mushipan0929
mushipan0929

スコア56

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,5 @@
1
+ -- 回答者様から目的が不鮮明とのご指摘を受けましたので、下記により具体的な質問を付け加えました。--
2
+
1
3
  殆どの処理は同じだが、一部だけ処理が違う場合どのような構成で書けばよいのでしょう?
2
4
  下に良く使う方法を2つ挙げました。
3
5
  2,3種類の場合は2を使い、それ以上になると1を使っています。
@@ -98,5 +100,109 @@
98
100
  C
99
101
  }
100
102
  ```
101
-
103
+ -----------------------------追記-------------------------------
102
-
104
+ ・条件
105
+ プレイヤーはDキーを押すとMoveUIが頭上に出現する
106
+ プレイヤーはAキーを押すとStopUIが頭上に出現する
107
+ 一度に出せるUIは1種類/1つのみ
108
+ !___既に同じUIが出ている場合は何も起こらない
109
+ !___違うUIが出ている場合はそのUIを消してから新しいUIを出す
110
+ 各UIは出現/消滅時に演出をする
111
+
112
+ UIを扱うPlayerがどうしても冗長になってしまっています。
113
+ また今後プレイヤーが扱うUIの種類が増えるとさらに長くなってしまいます。
114
+ どうにかここをシンプルに出来ないでしょうか?
115
+ ```
116
+ public class UiManagement
117
+ {
118
+ private MoveUI[] moveUIs;
119
+ private StopUI[] stopUIs;
120
+
121
+ public MoveUI FindNotUseMoveUI()
122
+ {
123
+ foreach(MoveUI moveUI in moveUIs)
124
+ {
125
+ if (moveUI.IsEnable == false) return moveUI;
126
+ }
127
+ return null;
128
+ }
129
+
130
+ public StopUI FindNotUseStopUI()
131
+ {
132
+ foreach (StopUI stopUI in stopUIs)
133
+ {
134
+ if (stopUI.IsEnable == false) return stopUI;
135
+ }
136
+ return null;
137
+ }
138
+ }
139
+
140
+ public class Player : MonoBehaviour
141
+ {
142
+ private UiManagement uiManagement;
143
+ private MoveUI moveUI;
144
+ private StopUI stopUI;
145
+
146
+ private void Update()
147
+ {
148
+ if(Input.GetKeyDown(KeyCode.A))
149
+ {
150
+ if (stopUI != null) return;
151
+ if (moveUI != null)
152
+ {
153
+ moveUI.Disable();
154
+ moveUI = null;
155
+ }
156
+ stopUI = uiManagement.FindNotUseStopUI();
157
+ stopUI.Enable();
158
+ }
159
+ if (Input.GetKeyDown(KeyCode.D))
160
+ {
161
+ if (moveUI != null) return;
162
+ if (stopUI != null)
163
+ {
164
+ stopUI.Disable();
165
+ stopUI = null;
166
+ }
167
+ moveUI = uiManagement.FindNotUseMoveUI();
168
+ moveUI.Enable();
169
+ }
170
+
171
+ if (moveUI != null) moveUI.ManagedUpdate();
172
+ else if (stopUI != null) stopUI.ManagedUpdate();
173
+ }
174
+ }
175
+
176
+ public class MoveUI : BaseUI
177
+ {
178
+ public void ManagedUpdate()
179
+ {
180
+ Debug.Log("MoveUI出現中");
181
+ }
182
+ }
183
+
184
+ public class StopUI : BaseUI
185
+ {
186
+ public void ManagedUpdate()
187
+ {
188
+ Debug.Log("StopUI出現中");
189
+ }
190
+ }
191
+
192
+
193
+ public class BaseUI
194
+ {
195
+ public bool IsEnable { get; private set; }
196
+
197
+ public void Enable()
198
+ {
199
+ IsEnable = true;
200
+ }
201
+
202
+ public void Disable()
203
+ {
204
+ IsEnable = false;
205
+ }
206
+ }
207
+ ```
208
+