質問編集履歴
1
文章の追記
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
|
+
|