質問編集履歴

3

文章の訂正

2022/01/14 08:02

投稿

maroyaka
maroyaka

スコア1

test CHANGED
File without changes
test CHANGED
@@ -154,6 +154,8 @@
154
154
 
155
155
  ```
156
156
  ![イメージ説明](7931be182a2523ae1b18506c49302b0f.png)
157
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-01-14/49896bbe-52be-405d-a836-91b6717bb7cc.png)
158
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-01-14/5acc74a4-b580-4812-aa5f-141500604362.png)
157
159
 
158
160
  ### 試したこと
159
161
  詳細画面もListで管理し、

2

2022/01/13 13:48

投稿

maroyaka
maroyaka

スコア1

test CHANGED
File without changes
test CHANGED
@@ -1,331 +1,164 @@
1
1
  ### 前提・実現したいこと
2
-
3
2
  Unityで2Dゲームを作っています。
4
-
5
3
  1.アイテムBOXのアイテムアイコンをクリック
6
-
7
4
  2.選択していることが分かる枠の表示
8
-
9
5
  3.もう一度クリックすると詳細画面が表示
10
-
11
6
  を実装したいです。
12
7
 
13
-
14
-
15
8
  落ちているアイテムを拾うと
16
-
17
9
  ・落ちていたアイテムを非表示
18
-
19
10
  ・アイテムBOXに拾ったアイテムのアイコンを表示
20
-
21
11
  ・詳細画面の表示(閉じるボタンで閉じる)
22
-
23
12
  がされるようになっています。
24
13
 
25
-
26
-
27
14
  また、枠はtoggle groupを使って一つだけが表示されるようにしています。
28
-
29
15
  アイテムは9個、詳細画面も9個あります。
30
-
31
16
  アイテムBOXのアイテム欄(スロット)は10個です。
32
-
33
-
34
17
 
35
18
  アイテムのアイコンは拾った順にLIstに入り、拾った順にアイテムBOXに表示されます。
36
19
 
37
-
38
-
39
20
  ### 発生している問題・エラーメッセージ
40
-
41
-
42
21
 
43
22
  1と2は出来ているのですが3が出来ていません。
44
23
 
45
-
46
-
47
24
  どのスロットにどのアイテムが入るかは固定で分からないので
48
-
49
25
  スロット1→詳細画面A
50
-
51
26
  スロット2→詳細画面B
52
-
53
27
  のように紐づけて表示・非表示というのは出来ないので困っています。
54
28
 
55
-
56
-
57
29
  また、スロットにアイテムが入っている & 枠が表示されている
58
-
59
30
  というのも詳細画面表示に必要な条件だと思うのですが、スクリプトの書き方が分かりません。
60
31
 
61
-
62
-
63
32
  どなたかご教授いただけないでしょうか。
64
-
65
33
  よろしくお願い致します。
66
34
 
67
35
 
68
36
 
37
+ ```ここに言語名を入力
38
+ using System;
39
+ using UnityEngine;
40
+ using UnityEngine.UI;
69
41
 
42
+ public class DropItem : MonoBehaviour
43
+ {
44
+ public Item item;
45
+ public GameObject detail;
70
46
 
71
-
72
-
73
- ```ここに言語名を入力
74
-
75
- using System;
47
+ public void Pickup()
76
-
48
+ {
49
+ Inventry.instance.Add(item);
50
+ detail.SetActive(true);
51
+ this.gameObject.SetActive(false);
52
+ }
53
+ }
54
+ ```
55
+ ```
77
56
  using UnityEngine;
78
57
 
58
+ [CreateAssetMenu]
59
+ public class Item : ScriptableObject
60
+ {
61
+ new public string name = "New Item";
62
+ public Sprite icon = null;
63
+ }
64
+ ```
65
+ ```
66
+ using System.Collections;
67
+ using System.Collections.Generic;
79
- using UnityEngine.UI;
68
+ using UnityEngine;
80
69
 
70
+ public class Inventry : MonoBehaviour
71
+ {
72
+ public static Inventry instance;
73
+ InventryUI inventryUI;
81
74
 
75
+ public List<Item> items = new List<Item>();
82
76
 
83
- public class DropItem : MonoBehaviour
84
-
85
- {
86
-
87
- public Item item;
88
-
89
- public GameObject detail;
90
-
91
-
92
-
93
- public void Pickup()
77
+ private void Awake()
94
-
95
78
  {
96
-
97
- Inventry.instance.Add(item);
79
+ if(instance == null)
98
-
80
+ {
99
- detail.SetActive(true);
81
+ instance = this;
100
-
101
- this.gameObject.SetActive(false);
82
+ }
102
-
103
83
  }
104
84
 
85
+ private void Start()
86
+ {
87
+ inventryUI = GetComponent<InventryUI>();
88
+ }
89
+
90
+ public void Add(Item item)
91
+ {
92
+ items.Add(item);
93
+ inventryUI.UpdateUI();
94
+ }
95
+
96
+ public void Remove(Item item)
97
+ {
98
+ items.Remove(item);
99
+ inventryUI.UpdateUI();
100
+ }
105
101
  }
106
102
 
107
103
  ```
108
-
109
104
  ```
110
-
105
+ using System.Collections;
106
+ using System.Collections.Generic;
111
107
  using UnityEngine;
112
108
 
109
+ public class InventryUI : MonoBehaviour
110
+ {
111
+ public Transform Panel;
112
+ Slot[] slots;
113
113
 
114
+ void Start()
115
+ {
116
+ slots = Panel.GetComponentsInChildren<Slot>();
117
+ }
114
118
 
115
- [CreateAssetMenu]
116
-
117
- public class Item : ScriptableObject
119
+ public void UpdateUI()
118
-
119
- {
120
+ {
120
-
121
+ for(int i=0; i<slots.Length; i++)
122
+ {
121
- new public string name = "New Item";
123
+ if (i < Inventry.instance.items.Count)
122
-
124
+ {
123
- public Sprite icon = null;
125
+ slots[i].AddItem(Inventry.instance.items[i]);
124
-
126
+ }
127
+ }
128
+ }
125
129
  }
126
130
 
127
131
  ```
132
+ ```
133
+ using UnityEngine;
134
+ using UnityEngine.UI;
135
+
136
+ public class Slot : MonoBehaviour
137
+ {
138
+ public Image icon;
139
+ public Image iconBack;
140
+ Item item;
141
+
142
+ public void AddItem(Item newItem)
143
+ {
144
+ item = newItem;
145
+ icon.sprite = newItem.icon;
146
+ }
147
+
148
+ public void ClearSlot()
149
+ {
150
+ item = null;
151
+ icon.sprite = null;
152
+ }
153
+ }
128
154
 
129
155
  ```
130
-
131
- using System.Collections;
132
-
133
- using System.Collections.Generic;
134
-
135
- using UnityEngine;
136
-
137
-
138
-
139
- public class Inventry : MonoBehaviour
140
-
141
- {
142
-
143
- public static Inventry instance;
144
-
145
- InventryUI inventryUI;
146
-
147
-
148
-
149
- public List<Item> items = new List<Item>();
150
-
151
-
152
-
153
- private void Awake()
154
-
155
- {
156
-
157
- if(instance == null)
158
-
159
- {
160
-
161
- instance = this;
162
-
163
- }
164
-
165
- }
166
-
167
-
168
-
169
- private void Start()
170
-
171
- {
172
-
173
- inventryUI = GetComponent<InventryUI>();
174
-
175
- }
176
-
177
-
178
-
179
- public void Add(Item item)
180
-
181
- {
182
-
183
- items.Add(item);
184
-
185
- inventryUI.UpdateUI();
186
-
187
- }
188
-
189
-
190
-
191
- public void Remove(Item item)
192
-
193
- {
194
-
195
- items.Remove(item);
196
-
197
- inventryUI.UpdateUI();
198
-
199
- }
200
-
201
- }
202
-
203
-
204
-
205
- ```
206
-
207
- ```
208
-
209
- using System.Collections;
210
-
211
- using System.Collections.Generic;
212
-
213
- using UnityEngine;
214
-
215
-
216
-
217
- public class InventryUI : MonoBehaviour
218
-
219
-
220
-
221
-
222
-
223
- {
224
-
225
- public Transform Panel;
226
-
227
- Slot[] slots;
228
-
229
-
230
-
231
- // Start is called before the first frame update
232
-
233
- void Start()
234
-
235
- {
236
-
237
- slots = Panel.GetComponentsInChildren<Slot>();
238
-
239
- }
240
-
241
-
242
-
243
- // Update is called once per frame
244
-
245
- public void UpdateUI()
246
-
247
- {
248
-
249
- for(int i=0; i<slots.Length; i++)
250
-
251
- {
252
-
253
- if (i < Inventry.instance.items.Count)
254
-
255
- {
256
-
257
- slots[i].AddItem(Inventry.instance.items[i]);
258
-
259
- }
260
-
261
- }
262
-
263
- }
264
-
265
- }
266
-
267
-
268
-
269
- ```
270
-
271
- ```
272
-
273
- using UnityEngine;
274
-
275
- using UnityEngine.UI;
276
-
277
-
278
-
279
- public class Slot : MonoBehaviour
280
-
281
- {
282
-
283
- public Image icon;
284
-
285
- public Image iconBack;
286
-
287
- Item item;
288
-
289
-
290
-
291
- public void AddItem(Item newItem)
292
-
293
- {
294
-
295
- item = newItem;
296
-
297
- icon.sprite = newItem.icon;
298
-
299
- }
300
-
301
-
302
-
303
- public void ClearSlot()
304
-
305
- {
306
-
307
- item = null;
308
-
309
- icon.sprite = null;
310
-
311
- }
312
-
313
- }
314
-
315
-
316
-
317
- ```
318
-
319
156
  ![イメージ説明](7931be182a2523ae1b18506c49302b0f.png)
320
157
 
321
-
322
-
323
158
  ### 試したこと
324
-
159
+ 詳細画面もListで管理し、
160
+ 拾ったアイテム[1]をクリックしたら、詳細画面[1]
325
- 詳細画面もListで管理し、拾ったアイテム[1]クリックしたら、詳細画面[1]を表示のようにすればいいのかなと思ったのですがこれもスクリプトの書き方が分からず断念してしいました。
161
+ を表示のようにすればいいのかなと思ったのですがこれもスクリプトの書き方が分からず断念しました。
326
-
327
-
328
162
 
329
163
  ### 補足情報(FW/ツールのバージョンなど)
330
-
331
164
  Unity 2020.3.25f1

1

2022/01/08 14:19

投稿

maroyaka
maroyaka

スコア1

test CHANGED
File without changes
test CHANGED
@@ -112,7 +112,7 @@
112
112
 
113
113
 
114
114
 
115
- [CreateAssetMenu(fileName = "New Item",menuName = "ScriptableObject/Create Item")]
115
+ [CreateAssetMenu]
116
116
 
117
117
  public class Item : ScriptableObject
118
118
 
@@ -322,11 +322,7 @@
322
322
 
323
323
  ### 試したこと
324
324
 
325
- 詳細画面もListで管理し、
326
-
327
- 拾ったアイテム[1]をクリックしたら、詳細画面[1]
328
-
329
- を表示のようにすればいいのかなと思ったのですがこれもスクリプトの書き方が分からず断念しました。
325
+ 詳細画面もListで管理し、拾ったアイテム[1]クリックしたら、詳細画面[1]を表示のようにすればいいのかなと思ったのですがこれもスクリプトの書き方が分からず断念してしいました。
330
326
 
331
327
 
332
328