回答編集履歴

6

詳細の追加とコードの修正

2020/04/21 06:00

投稿

hehebeb
hehebeb

スコア728

test CHANGED
@@ -278,7 +278,7 @@
278
278
 
279
279
  ただしこれでは鬼が何百体もいたらいちいちボタンを設定することになるので、
280
280
 
281
- GameControllerからpublicなボタンを一回取得するやり方でいいと思います↓
281
+ それが面倒ならGameControllerからpublicなボタンを一回取得するやり方でいいと思います↓
282
282
 
283
283
 
284
284
 
@@ -313,3 +313,31 @@
313
313
  }
314
314
 
315
315
  ```
316
+
317
+
318
+
319
+ もしくは検索させることで取得できます↓
320
+
321
+
322
+
323
+ ```C#
324
+
325
+ //鬼コントローラ
326
+
327
+
328
+
329
+ Button Botan;
330
+
331
+
332
+
333
+ void Start()
334
+
335
+ {
336
+
337
+ //Botanという名前のオブジェクトを取得し、その中のButtonコンポーネントを代入
338
+
339
+ Botan = GameObject.Find("Botan").GetComponent<Button>();
340
+
341
+ }
342
+
343
+ ```

5

詳細の追加とコードの修正

2020/04/21 06:00

投稿

hehebeb
hehebeb

スコア728

test CHANGED
@@ -242,6 +242,10 @@
242
242
 
243
243
 
244
244
 
245
+ //インスペクターから代入する
246
+
247
+ [SerializeField]
248
+
245
249
  Button Botan;
246
250
 
247
251
 
@@ -269,3 +273,43 @@
269
273
  }
270
274
 
271
275
  ```
276
+
277
+
278
+
279
+ ただしこれでは鬼が何百体もいたらいちいちボタンを設定することになるので、
280
+
281
+ GameControllerからpublicなボタンを一回取得するやり方でいいと思います↓
282
+
283
+
284
+
285
+ ```C#
286
+
287
+ //GameController.cs
288
+
289
+
290
+
291
+ public Button Botan;
292
+
293
+ ```
294
+
295
+
296
+
297
+ ```C#
298
+
299
+ //鬼コントローラー
300
+
301
+
302
+
303
+ Button Botan;
304
+
305
+ GameController gameController;
306
+
307
+ void Start()
308
+
309
+ {
310
+
311
+ this.Botan = gameController.Botan;
312
+
313
+ }
314
+
315
+ ```

4

詳細の追加とコードの修正

2020/04/21 05:58

投稿

hehebeb
hehebeb

スコア728

test CHANGED
@@ -223,3 +223,49 @@
223
223
  }
224
224
 
225
225
  ```
226
+
227
+
228
+
229
+
230
+
231
+ ###追記3
232
+
233
+
234
+
235
+ 触れたときにボタンを表示し、離れたときにボタンを非表示にする。
236
+
237
+
238
+
239
+ ```C#
240
+
241
+ //鬼コントローラ
242
+
243
+
244
+
245
+ Button Botan;
246
+
247
+
248
+
249
+ void OnCollisionEnter(Collision hit)
250
+
251
+ {
252
+
253
+ //表示
254
+
255
+ Botan.gameObject.SetActive(true);
256
+
257
+ }
258
+
259
+
260
+
261
+ void OnCollisionExit(Collision hit)
262
+
263
+ {
264
+
265
+ //非表示
266
+
267
+ Botan.gameObject.SetActive(false);
268
+
269
+ }
270
+
271
+ ```

3

詳細の追加とコードの修正

2020/04/21 05:54

投稿

hehebeb
hehebeb

スコア728

test CHANGED
@@ -139,3 +139,87 @@
139
139
 
140
140
 
141
141
  複数のオブジェクトを管理する場合、このようにList<>、foreachなどを利用することが多いです。
142
+
143
+
144
+
145
+
146
+
147
+ ###追加2
148
+
149
+
150
+
151
+ 鬼でPlayersリストを作成しておく必要はないです。
152
+
153
+ ただ触れた一つのPlayerオブジェクトを移動させるだけなのですから。
154
+
155
+
156
+
157
+ ```C#
158
+
159
+ public class PlayerController : MonoBehaviour
160
+
161
+ {
162
+
163
+ public bool isHokaku = false;
164
+
165
+
166
+
167
+ //捕獲されたら呼び出す
168
+
169
+ public void Hokaku()
170
+
171
+ {
172
+
173
+ isHokaku = true;
174
+
175
+
176
+
177
+ /*牢屋に移動*/
178
+
179
+ }
180
+
181
+ }
182
+
183
+ ```
184
+
185
+
186
+
187
+ ```C#
188
+
189
+ public class OniController : MonoBehaviour
190
+
191
+ {
192
+
193
+ void OnCollisionEnter(Collision hit)
194
+
195
+ {
196
+
197
+ if (hit.gameObject.tag == "Player")
198
+
199
+ {
200
+
201
+ //Debug.Log("プレイヤーと接触している");
202
+
203
+
204
+
205
+ //鬼コントローラーからPlayerのHokaku()を実行
206
+
207
+ hit.gameObject.GetComponent<PlayerController>().Hokaku();
208
+
209
+
210
+
211
+
212
+
213
+ OnButtonHokaku();
214
+
215
+
216
+
217
+
218
+
219
+ }
220
+
221
+ }
222
+
223
+ }
224
+
225
+ ```

2

コードの追加

2020/04/21 02:51

投稿

hehebeb
hehebeb

スコア728

test CHANGED
@@ -54,4 +54,88 @@
54
54
 
55
55
 
56
56
 
57
- コードが見づらくてすみません。今スマホで書いてるので整理することができません。後で書き直します。
57
+ コードが見づらくてすみません。今スマホで書いてるので整理することができません。
58
+
59
+
60
+
61
+
62
+
63
+ ###追加
64
+
65
+
66
+
67
+ 複数のゲームオブジェクトを取得する場合、List<GameObject>もしくはGameObject[]を利用します。
68
+
69
+ これらはGameObjectの集合です。今回はList<>を使用します。
70
+
71
+
72
+
73
+ コードの関係があるところだけを書いています。関係のある個所を当てはめていってください。
74
+
75
+ GameObject Playerは削除しています。
76
+
77
+
78
+
79
+
80
+
81
+ ```C#
82
+
83
+ public class GameController : MonoBehaviour
84
+
85
+ {
86
+
87
+ //プレイヤーオブジェクトの宣言&初期化
88
+
89
+ List<GameObject> Players = new List<GameObject>();
90
+
91
+
92
+
93
+ void Start()
94
+
95
+ {
96
+
97
+ //PlayersにPlayerタグが付いているオブジェクトをすべて入れる(FindGameObjectWithTagではないので注意)
98
+
99
+ Players.AddRange(GameObject.FindGameObjectsWithTag("Player"));
100
+
101
+ }
102
+
103
+
104
+
105
+ public void OnButtonKaiho()
106
+
107
+ {
108
+
109
+ Rouya.SetActive(false);
110
+
111
+ Debug.Log("牢屋消えた");
112
+
113
+
114
+
115
+ //foreachによりPlayersに入っているオブジェクトの数だけ処理を実行
116
+
117
+ foreach(GameObject player in Players)
118
+
119
+ {
120
+
121
+ player.GetComponent<PlayerController>().isCaptured = false;
122
+
123
+ Debug.Log("プレイヤー捕まってない状態");
124
+
125
+ }
126
+
127
+
128
+
129
+ Rouya.GetComponent<RouyaScript>().ishelp = false;
130
+
131
+ Debug.Log("助ける状態のリセット");
132
+
133
+ }
134
+
135
+ }
136
+
137
+ ```
138
+
139
+
140
+
141
+ 複数のオブジェクトを管理する場合、このようにList<>、foreachなどを利用することが多いです。

1

コードの修正

2020/04/19 12:42

投稿

hehebeb
hehebeb

スコア728

test CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
  void OnCollisionEnter(Collision collision){
32
32
 
33
- if(collision.compareTag("Player"))
33
+ if(collision.gameObjrct.compareTag("Player"))
34
34
 
35
35
  if(collision.GetComponent<PlayerController>().isCaptured == false)
36
36