teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

6

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

2020/04/21 06:00

投稿

hehebeb
hehebeb

スコア728

answer CHANGED
@@ -138,7 +138,7 @@
138
138
  ```
139
139
 
140
140
  ただしこれでは鬼が何百体もいたらいちいちボタンを設定することになるので、
141
- GameControllerからpublicなボタンを一回取得するやり方でいいと思います↓
141
+ それが面倒ならGameControllerからpublicなボタンを一回取得するやり方でいいと思います↓
142
142
 
143
143
  ```C#
144
144
  //GameController.cs
@@ -155,4 +155,18 @@
155
155
  {
156
156
  this.Botan = gameController.Botan;
157
157
  }
158
+ ```
159
+
160
+ もしくは検索させることで取得できます↓
161
+
162
+ ```C#
163
+ //鬼コントローラ
164
+
165
+ Button Botan;
166
+
167
+ void Start()
168
+ {
169
+ //Botanという名前のオブジェクトを取得し、その中のButtonコンポーネントを代入
170
+ Botan = GameObject.Find("Botan").GetComponent<Button>();
171
+ }
158
172
  ```

5

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

2020/04/21 06:00

投稿

hehebeb
hehebeb

スコア728

answer CHANGED
@@ -120,6 +120,8 @@
120
120
  ```C#
121
121
  //鬼コントローラ
122
122
 
123
+ //インスペクターから代入する
124
+ [SerializeField]
123
125
  Button Botan;
124
126
 
125
127
  void OnCollisionEnter(Collision hit)
@@ -133,4 +135,24 @@
133
135
  //非表示
134
136
  Botan.gameObject.SetActive(false);
135
137
  }
138
+ ```
139
+
140
+ ただしこれでは鬼が何百体もいたらいちいちボタンを設定することになるので、
141
+ GameControllerからpublicなボタンを一回取得するやり方でいいと思います↓
142
+
143
+ ```C#
144
+ //GameController.cs
145
+
146
+ public Button Botan;
147
+ ```
148
+
149
+ ```C#
150
+ //鬼コントローラー
151
+
152
+ Button Botan;
153
+ GameController gameController;
154
+ void Start()
155
+ {
156
+ this.Botan = gameController.Botan;
157
+ }
136
158
  ```

4

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

2020/04/21 05:58

投稿

hehebeb
hehebeb

スコア728

answer CHANGED
@@ -110,4 +110,27 @@
110
110
  }
111
111
  }
112
112
  }
113
+ ```
114
+
115
+
116
+ ###追記3
117
+
118
+ 触れたときにボタンを表示し、離れたときにボタンを非表示にする。
119
+
120
+ ```C#
121
+ //鬼コントローラ
122
+
123
+ Button Botan;
124
+
125
+ void OnCollisionEnter(Collision hit)
126
+ {
127
+ //表示
128
+ Botan.gameObject.SetActive(true);
129
+ }
130
+
131
+ void OnCollisionExit(Collision hit)
132
+ {
133
+ //非表示
134
+ Botan.gameObject.SetActive(false);
135
+ }
113
136
  ```

3

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

2020/04/21 05:54

投稿

hehebeb
hehebeb

スコア728

answer CHANGED
@@ -68,4 +68,46 @@
68
68
  }
69
69
  ```
70
70
 
71
- 複数のオブジェクトを管理する場合、このようにList<>、foreachなどを利用することが多いです。
71
+ 複数のオブジェクトを管理する場合、このようにList<>、foreachなどを利用することが多いです。
72
+
73
+
74
+ ###追加2
75
+
76
+ 鬼でPlayersリストを作成しておく必要はないです。
77
+ ただ触れた一つのPlayerオブジェクトを移動させるだけなのですから。
78
+
79
+ ```C#
80
+ public class PlayerController : MonoBehaviour
81
+ {
82
+ public bool isHokaku = false;
83
+
84
+ //捕獲されたら呼び出す
85
+ public void Hokaku()
86
+ {
87
+ isHokaku = true;
88
+
89
+ /*牢屋に移動*/
90
+ }
91
+ }
92
+ ```
93
+
94
+ ```C#
95
+ public class OniController : MonoBehaviour
96
+ {
97
+ void OnCollisionEnter(Collision hit)
98
+ {
99
+ if (hit.gameObject.tag == "Player")
100
+ {
101
+ //Debug.Log("プレイヤーと接触している");
102
+
103
+ //鬼コントローラーからPlayerのHokaku()を実行
104
+ hit.gameObject.GetComponent<PlayerController>().Hokaku();
105
+
106
+
107
+ OnButtonHokaku();
108
+
109
+
110
+ }
111
+ }
112
+ }
113
+ ```

2

コードの追加

2020/04/21 02:51

投稿

hehebeb
hehebeb

スコア728

answer CHANGED
@@ -26,4 +26,46 @@
26
26
 
27
27
  わからないことがあれば返信ください。
28
28
 
29
- コードが見づらくてすみません。今スマホで書いてるので整理することができません。後で書き直します。
29
+ コードが見づらくてすみません。今スマホで書いてるので整理することができません。
30
+
31
+
32
+ ###追加
33
+
34
+ 複数のゲームオブジェクトを取得する場合、List<GameObject>もしくはGameObject[]を利用します。
35
+ これらはGameObjectの集合です。今回はList<>を使用します。
36
+
37
+ コードの関係があるところだけを書いています。関係のある個所を当てはめていってください。
38
+ GameObject Playerは削除しています。
39
+
40
+
41
+ ```C#
42
+ public class GameController : MonoBehaviour
43
+ {
44
+ //プレイヤーオブジェクトの宣言&初期化
45
+ List<GameObject> Players = new List<GameObject>();
46
+
47
+ void Start()
48
+ {
49
+ //PlayersにPlayerタグが付いているオブジェクトをすべて入れる(FindGameObjectWithTagではないので注意)
50
+ Players.AddRange(GameObject.FindGameObjectsWithTag("Player"));
51
+ }
52
+
53
+ public void OnButtonKaiho()
54
+ {
55
+ Rouya.SetActive(false);
56
+ Debug.Log("牢屋消えた");
57
+
58
+ //foreachによりPlayersに入っているオブジェクトの数だけ処理を実行
59
+ foreach(GameObject player in Players)
60
+ {
61
+ player.GetComponent<PlayerController>().isCaptured = false;
62
+ Debug.Log("プレイヤー捕まってない状態");
63
+ }
64
+
65
+ Rouya.GetComponent<RouyaScript>().ishelp = false;
66
+ Debug.Log("助ける状態のリセット");
67
+ }
68
+ }
69
+ ```
70
+
71
+ 複数のオブジェクトを管理する場合、このようにList<>、foreachなどを利用することが多いです。

1

コードの修正

2020/04/19 12:42

投稿

hehebeb
hehebeb

スコア728

answer CHANGED
@@ -14,7 +14,7 @@
14
14
  牢屋の判定ボックスのスクリプト
15
15
  ```C#
16
16
  void OnCollisionEnter(Collision collision){
17
- if(collision.compareTag("Player"))
17
+ if(collision.gameObjrct.compareTag("Player"))
18
18
  if(collision.GetComponent<PlayerController>().isCaptured == false)
19
19
  {
20
20
  //開放する処理