質問編集履歴

2

解決策に上司が Startでテキストオブジェクトを参照しておいて、Updateで値を変更したら できるといわれた

2018/09/03 06:12

投稿

UKAWATAKATO
UKAWATAKATO

スコア14

test CHANGED
File without changes
test CHANGED
@@ -1,309 +1,303 @@
1
+ Find can only be called from the main thread
2
+
3
+ とコンソールにエラーがでてきてしまうので
4
+
5
+ よろしければなぜエラーが出てしまうのか、解決策をアドバイスしてほしいです。
6
+
7
+ デバックは行いました。解決策に上司が
8
+
9
+ Startでテキストオブジェクトを参照しておいて、Updateで値を変更したら
10
+
11
+ できるといいましたが、よくわかりませんでした。
12
+
13
+ お願いしますよろしければ教えてもらえませんか。
14
+
15
+
16
+
17
+
18
+
19
+ using System.Collections;
20
+
21
+ using System.Collections.Generic;
22
+
23
+ using UnityEngine;
24
+
25
+ using System.Net;
26
+
27
+ using System.Net.Sockets;
28
+
29
+ using System.Threading;
30
+
31
+ using UnityEngine.UI; // <---- 追加1
32
+
33
+
34
+
35
+ public class UdpSocket : MonoBehaviour
36
+
37
+ {
38
+
39
+ private string _MulticastAddr = "224.0.23.0"; // マルチキャストアドレス
40
+
41
+ private string _RemoteHost = ""; // 送信相手アドレス
42
+
43
+ private int _SendPort = 3610; // 送信ポート
44
+
45
+ private int _RecvPort = 3610; // 受信ポート
46
+
47
+
48
+
49
+ private UdpClient _UdpClient; // UDP
50
+
51
+ private IPEndPoint _IpEndPoint; // IPEndPoint
52
+
53
+ private Thread _RecvThread; // 受信スレッド
54
+
55
+
56
+
57
+ // 接続
58
+
59
+ public void Connect()
60
+
61
+ {
62
+
63
+ IPAddress grpAddr = IPAddress.Parse(_MulticastAddr);
64
+
65
+
66
+
67
+ if (_IpEndPoint != null) _IpEndPoint = null;
68
+
69
+ _IpEndPoint = new IPEndPoint(grpAddr, _RecvPort);
70
+
71
+
72
+
73
+ // マルチキャストグループに参加
74
+
75
+ Disconnect();
76
+
77
+ _UdpClient = new UdpClient(_RecvPort);
78
+
79
+ _UdpClient.JoinMulticastGroup(grpAddr);
80
+
81
+
82
+
83
+ // 受信スレッド生成
84
+
85
+ _RecvThread = new Thread(ReceiveMulticastThread);
86
+
87
+ _RecvThread.Start();
88
+
89
+
90
+
91
+ // ノードプロファイル通知送信
92
+
93
+ SendNodeProfile();
94
+
95
+ }
96
+
97
+
98
+
99
+ // 切断
100
+
101
+ public void Disconnect()
102
+
103
+ {
104
+
105
+ if (_RecvThread != null)
106
+
107
+ {
108
+
109
+ _RecvThread.Abort();
110
+
111
+ _RecvThread = null;
112
+
113
+ }
114
+
115
+
116
+
117
+ if (_UdpClient != null)
118
+
119
+ {
120
+
121
+ IPAddress grpAddr = IPAddress.Parse(_MulticastAddr);
122
+
123
+ _UdpClient.DropMulticastGroup(grpAddr);
124
+
125
+ _UdpClient.Close();
126
+
127
+ _UdpClient = null;
128
+
129
+ }
130
+
131
+ }
132
+
133
+
134
+
135
+ // ノードプロファイル通知送信
136
+
137
+ public void SendNodeProfile()
138
+
139
+ {
140
+
141
+ byte[] pack = BuildNodeProfileInfo();
142
+
143
+ SendPacket(pack, _MulticastAddr);
144
+
145
+ }
146
+
147
+
148
+
149
+ // 送信
150
+
151
+ public void SendPacket(byte[] packet, string host)
152
+
153
+ {
154
+
155
+ _UdpClient.Send(packet, packet.Length, host, _SendPort);
156
+
157
+ }
158
+
159
+
160
+
161
+ // 受信スレッド
162
+
163
+ public void ReceiveMulticastThread()
164
+
165
+ {
166
+
167
+ byte[] packet;
168
+
169
+
170
+
171
+ int i = 0;
172
+
173
+
174
+
175
+ System.Text.StringBuilder s = new System.Text.StringBuilder();
176
+
177
+
178
+
179
+ while (true)
180
+
181
+ {
182
+
183
+ packet = _UdpClient.Receive(ref _IpEndPoint);
184
+
185
+ if (packet != null)
186
+
187
+ {
188
+
189
+ // 受信できた!
190
+
191
+ s.Remove(0, s.Length);
192
+
193
+ for (i = 0; i < packet.Length; i++)
194
+
195
+ {
196
+
197
+ s.Append(System.Convert.ToString(packet[i], 16).PadLeft(2, '0'));
198
+
199
+ }
200
+
201
+
202
+
203
+ Debug.Log(s.ToString());
204
+
205
+
206
+
207
+
208
+
209
+ Text targetText; // <---- 追加2
210
+
211
+ GameObject _Object;
212
+
213
+ _Object = GameObject.Find("Text");
214
+
215
+
216
+
217
+
218
+
219
+ targetText = _Object.GetComponent<Text>(); // <---- 追加3
220
+
221
+ targetText.text = "s.ToString()"; // <---- 追加4
222
+
223
+
224
+
225
+ }
226
+
227
+ }
228
+
229
+ }
230
+
231
+
232
+
233
+ // ノードプロファイル通知パケット作成
234
+
235
+ private byte[] BuildNodeProfileInfo()
236
+
237
+ {
238
+
239
+ byte[] pack;
240
+
241
+ pack = new byte[17];
242
+
243
+
244
+
245
+ pack[0] = 0x10; // EHD1
246
+
247
+ pack[1] = 0x81; // EHD2
248
+
249
+ pack[2] = 0x00; //
250
+
251
+ pack[3] = 0x01; // ID
252
+
253
+
254
+
255
+ pack[4] = 0x0E; // 送信元「ノードプロファイルクラス」
256
+
257
+ pack[5] = 0xF0; // EOJ = 0x0E F0 01
258
+
259
+ pack[6] = 0x01; //
260
+
261
+
262
+
263
+ pack[7] = 0x0E; // 送信先「ノードプロファイルクラス」
264
+
265
+ pack[8] = 0xF0; // EOJ = 0x0E F0 01
266
+
267
+ pack[9] = 0x01; //
268
+
269
+
270
+
271
+ pack[10] = 0x73; // ESV
272
+
273
+
274
+
275
+ pack[11] = 0x01; // OPC
276
+
277
+
278
+
279
+ pack[12] = 0xD5; // EPC
280
+
281
+ pack[13] = 0x04; // PDC
282
+
283
+ pack[14] = 0x01; // EDT
284
+
285
+ pack[15] = 0x05; //
286
+
287
+ pack[16] = 0xFF; //
288
+
289
+ pack[16] = 0x01; //
290
+
291
+
292
+
293
+ return pack;
294
+
295
+ }
296
+
297
+ }
298
+
299
+
300
+
301
+ コード
302
+
1
303
  ```
2
-
3
- unityでUDP通信を行っていた際
4
-
5
- Find can only be called from the main thread
6
-
7
- とコンソールにエラーがでてきてしまうので
8
-
9
- よろしければなぜエラーが出てしまうのか、解決策をアドバイスしてほしいです。
10
-
11
- デバックは行いました。
12
-
13
-
14
-
15
- 解決策に上司が
16
-
17
- Startでテキストオブジェクトを参照しておいて、Updateで値を変更したら
18
-
19
- できるといいましたが、よくわかりませんでした。
20
-
21
-
22
-
23
-
24
-
25
- using System.Collections;
26
-
27
- using System.Collections.Generic;
28
-
29
- using UnityEngine;
30
-
31
- using System.Net;
32
-
33
- using System.Net.Sockets;
34
-
35
- using System.Threading;
36
-
37
- using UnityEngine.UI; // <---- 追加1
38
-
39
-
40
-
41
- public class UdpSocket : MonoBehaviour
42
-
43
- {
44
-
45
- private string _MulticastAddr = "224.0.23.0"; // マルチキャストアドレス
46
-
47
- private string _RemoteHost = ""; // 送信相手アドレス
48
-
49
- private int _SendPort = 3610; // 送信ポート
50
-
51
- private int _RecvPort = 3610; // 受信ポート
52
-
53
-
54
-
55
- private UdpClient _UdpClient; // UDP
56
-
57
- private IPEndPoint _IpEndPoint; // IPEndPoint
58
-
59
- private Thread _RecvThread; // 受信スレッド
60
-
61
-
62
-
63
- // 接続
64
-
65
- public void Connect()
66
-
67
- {
68
-
69
- IPAddress grpAddr = IPAddress.Parse(_MulticastAddr);
70
-
71
-
72
-
73
- if (_IpEndPoint != null) _IpEndPoint = null;
74
-
75
- _IpEndPoint = new IPEndPoint(grpAddr, _RecvPort);
76
-
77
-
78
-
79
- // マルチキャストグループに参加
80
-
81
- Disconnect();
82
-
83
- _UdpClient = new UdpClient(_RecvPort);
84
-
85
- _UdpClient.JoinMulticastGroup(grpAddr);
86
-
87
-
88
-
89
- // 受信スレッド生成
90
-
91
- _RecvThread = new Thread(ReceiveMulticastThread);
92
-
93
- _RecvThread.Start();
94
-
95
-
96
-
97
- // ノードプロファイル通知送信
98
-
99
- SendNodeProfile();
100
-
101
- }
102
-
103
-
104
-
105
- // 切断
106
-
107
- public void Disconnect()
108
-
109
- {
110
-
111
- if (_RecvThread != null)
112
-
113
- {
114
-
115
- _RecvThread.Abort();
116
-
117
- _RecvThread = null;
118
-
119
- }
120
-
121
-
122
-
123
- if (_UdpClient != null)
124
-
125
- {
126
-
127
- IPAddress grpAddr = IPAddress.Parse(_MulticastAddr);
128
-
129
- _UdpClient.DropMulticastGroup(grpAddr);
130
-
131
- _UdpClient.Close();
132
-
133
- _UdpClient = null;
134
-
135
- }
136
-
137
- }
138
-
139
-
140
-
141
- // ノードプロファイル通知送信
142
-
143
- public void SendNodeProfile()
144
-
145
- {
146
-
147
- byte[] pack = BuildNodeProfileInfo();
148
-
149
- SendPacket(pack, _MulticastAddr);
150
-
151
- }
152
-
153
-
154
-
155
- // 送信
156
-
157
- public void SendPacket(byte[] packet, string host)
158
-
159
- {
160
-
161
- _UdpClient.Send(packet, packet.Length, host, _SendPort);
162
-
163
- }
164
-
165
-
166
-
167
- // 受信スレッド
168
-
169
- public void ReceiveMulticastThread()
170
-
171
- {
172
-
173
- byte[] packet;
174
-
175
-
176
-
177
- int i = 0;
178
-
179
-
180
-
181
- System.Text.StringBuilder s = new System.Text.StringBuilder();
182
-
183
-
184
-
185
- while (true)
186
-
187
- {
188
-
189
- packet = _UdpClient.Receive(ref _IpEndPoint);
190
-
191
- if (packet != null)
192
-
193
- {
194
-
195
- // 受信できた!
196
-
197
- s.Remove(0, s.Length);
198
-
199
- for (i = 0; i < packet.Length; i++)
200
-
201
- {
202
-
203
- s.Append(System.Convert.ToString(packet[i], 16).PadLeft(2, '0'));
204
-
205
- }
206
-
207
-
208
-
209
- Debug.Log(s.ToString());
210
-
211
-
212
-
213
-
214
-
215
- Text targetText; // <---- 追加2
216
-
217
- GameObject _Object;
218
-
219
- _Object = GameObject.Find("Text");
220
-
221
-
222
-
223
-
224
-
225
- targetText = _Object.GetComponent<Text>(); // <---- 追加3
226
-
227
- targetText.text = "s.ToString()"; // <---- 追加4
228
-
229
-
230
-
231
- }
232
-
233
- }
234
-
235
- }
236
-
237
-
238
-
239
- // ノードプロファイル通知パケット作成
240
-
241
- private byte[] BuildNodeProfileInfo()
242
-
243
- {
244
-
245
- byte[] pack;
246
-
247
- pack = new byte[17];
248
-
249
-
250
-
251
- pack[0] = 0x10; // EHD1
252
-
253
- pack[1] = 0x81; // EHD2
254
-
255
- pack[2] = 0x00; //
256
-
257
- pack[3] = 0x01; // ID
258
-
259
-
260
-
261
- pack[4] = 0x0E; // 送信元「ノードプロファイルクラス」
262
-
263
- pack[5] = 0xF0; // EOJ = 0x0E F0 01
264
-
265
- pack[6] = 0x01; //
266
-
267
-
268
-
269
- pack[7] = 0x0E; // 送信先「ノードプロファイルクラス」
270
-
271
- pack[8] = 0xF0; // EOJ = 0x0E F0 01
272
-
273
- pack[9] = 0x01; //
274
-
275
-
276
-
277
- pack[10] = 0x73; // ESV
278
-
279
-
280
-
281
- pack[11] = 0x01; // OPC
282
-
283
-
284
-
285
- pack[12] = 0xD5; // EPC
286
-
287
- pack[13] = 0x04; // PDC
288
-
289
- pack[14] = 0x01; // EDT
290
-
291
- pack[15] = 0x05; //
292
-
293
- pack[16] = 0xFF; //
294
-
295
- pack[16] = 0x01; //
296
-
297
-
298
-
299
- return pack;
300
-
301
- }
302
-
303
- }
304
-
305
-
306
-
307
- コード
308
-
309
- ```

1

追加の情報を加えた

2018/09/03 06:12

投稿

UKAWATAKATO
UKAWATAKATO

スコア14

test CHANGED
File without changes
test CHANGED
@@ -12,6 +12,12 @@
12
12
 
13
13
 
14
14
 
15
+ 解決策に上司が
16
+
17
+ Startでテキストオブジェクトを参照しておいて、Updateで値を変更したら
18
+
19
+ できるといいましたが、よくわかりませんでした。
20
+
15
21
 
16
22
 
17
23