質問編集履歴

6

このコードが何の処理をするためのコードなのかを追記しました。

2020/08/20 01:11

投稿

kosho206
kosho206

スコア41

test CHANGED
File without changes
test CHANGED
@@ -1,5 +1,9 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
+ これはPhotonでマルチプレイヤーゲームを作るためのコードです。
4
+
5
+ カメラをプレイヤーオブジェクトに追従させるための処理で問題が発生しています。
6
+
3
7
 
4
8
 
5
9
  下記コードのforeach文内のif文が実行されません。

5

他のコミュニティの方に教えていただいたおかげで、まだ解決はしていないものの前にこの質問文を書いた時と比べて進捗があったので質問文を書き直しました。

2020/08/20 01:11

投稿

kosho206
kosho206

スコア41

test CHANGED
@@ -1 +1 @@
1
- 【Unity】Photonで自身インスタンスネットワークオブジェクトをコードから取得した
1
+ 【Unity】Photonの処理if文条件があっているはずなに、実行されずに困って
test CHANGED
@@ -2,17 +2,19 @@
2
2
 
3
3
 
4
4
 
5
- 今、プレイヤキャラObjとカメラネットワークオブジェクトとしてあり
5
+ 下記コドのforeach文内のif文実行されせん
6
+
6
-
7
+ Debug.Logで確認しましたが、if文の条件になっている2つの変数はどちらも同じ数字でした。
8
+
7
- カメラはプレイヤーキャラObj追従するようっています。
9
+ 変数が同じ数字なのも関わらず、if文が実行されずっています。
8
-
9
- 追従するために、カメラ側のコードでプレイヤーキャラObjを取得したいです。
10
+
10
-
11
- そして、今作っているのはマルチプレイゲームなので、カメラがプレイヤーキャラObjを取得する時は、自身のインスタンスのObjのみを取得するようにしたいです。
11
+
12
-
13
-
14
-
12
+
15
- ですが、ためはどんなコードを書けば良いのかがわかりません。
13
+ if文実行されない原因はスクリプトりますか?
14
+
15
+ それとも、この質問に載せたコードを見る限りでは特に問題はなく、他のスクリプトなどに原因がある可能性が高いですか?
16
+
17
+
16
18
 
17
19
  ### 発生している問題・エラーメッセージ
18
20
 
@@ -20,7 +22,7 @@
20
22
 
21
23
  ```
22
24
 
23
- エラーメッセージは出ていません。
25
+ エラーメッセージ
24
26
 
25
27
  ```
26
28
 
@@ -30,65 +32,293 @@
30
32
 
31
33
 
32
34
 
35
+
36
+
37
+ こちらが、いま問題が起きているコードです。
38
+
33
39
  ```ここに言語名を入力
34
40
 
35
- ソースコード
41
+ void Awake()
42
+
43
+ {
44
+
45
+ if (!photonView.IsMine) return;
46
+
47
+ Debug.Log("UnkomanCameraControl:Awake");
48
+
49
+ StartCoroutine(GetTarget(0.5f));
50
+
51
+ }
52
+
53
+
54
+
55
+ //一定時間立ってからtargetを取得
56
+
57
+ private IEnumerator GetTarget(float i_time)
58
+
59
+ {
60
+
61
+ yield return new WaitForSeconds(i_time);
62
+
63
+
64
+
65
+ foreach (GameObject Unkoman in GameObject.FindGameObjectsWithTag("Player"))
66
+
67
+ {
68
+
69
+ object CameraActorNumber = photonView.InstantiationData[0];
70
+
71
+ object UnkomanActorNumber = Unkoman.GetComponent<UnkomanControl>().unkomanActorNumber;
72
+
73
+
74
+
75
+ Debug.Log(CameraActorNumber);
76
+
77
+ Debug.Log(UnkomanActorNumber);
78
+
79
+
80
+
81
+ if (CameraActorNumber == UnkomanActorNumber)
82
+
83
+ {
84
+
85
+ Debug.Log("めい怖くないもん!!");
86
+
87
+ target = Unkoman;
88
+
89
+ }
90
+
91
+ }
92
+
93
+ Debug.Log(target);
94
+
95
+ }
36
96
 
37
97
  ```
38
98
 
99
+ こちらが、いま問題になっているコードを含めた、スクリプトの全文です。
100
+
101
+ ```ここに言語を入力
102
+
103
+ using System.Collections;
104
+
105
+ using System.Collections.Generic;
106
+
107
+ using UnityEngine;
108
+
109
+ using Photon.Pun;
110
+
111
+ using Photon.Realtime;
112
+
113
+
114
+
115
+ namespace CSharpScript
116
+
117
+ {
118
+
119
+ // [ExecuteInEditMode, DisallowMultipleComponent]
120
+
121
+ public class UnkomanCameraControl : MonoBehaviourPunCallbacks
122
+
123
+ {
124
+
125
+ private GameObject target;
126
+
127
+ public Vector3 offset;
128
+
129
+
130
+
131
+ [SerializeField] private float distance = 4.0f;
132
+
133
+ [SerializeField] private float polarAngle = 87.0f;
134
+
135
+ [SerializeField] private float azimuthalAngle = 270f;
136
+
137
+
138
+
139
+ [SerializeField] private float minPolarAngle = 2.0f;
140
+
141
+ [SerializeField] private float maxPolarAngle = 130.0f;
142
+
143
+ [SerializeField] private float mouseXSensitivity = 5.0f;
144
+
145
+ [SerializeField] private float mouseYSensitivity = 5.0f;
146
+
147
+
148
+
149
+ void Awake()
150
+
151
+ {
152
+
153
+ if (!photonView.IsMine) return;
154
+
155
+ Debug.Log("UnkomanCameraControl:Awake");
156
+
157
+ StartCoroutine(GetTarget(0.5f));
158
+
159
+ }
160
+
161
+
162
+
163
+ //一定時間立ってからtargetを取得
164
+
165
+ private IEnumerator GetTarget(float i_time)
166
+
167
+ {
168
+
169
+ yield return new WaitForSeconds(i_time);
170
+
171
+
172
+
173
+ foreach (GameObject Unkoman in GameObject.FindGameObjectsWithTag("Player"))
174
+
175
+ {
176
+
177
+ object CameraActorNumber = photonView.InstantiationData[0];
178
+
179
+ object UnkomanActorNumber = Unkoman.GetComponent<UnkomanControl>().unkomanActorNumber;
180
+
181
+
182
+
183
+ Debug.Log(CameraActorNumber);
184
+
185
+ Debug.Log(UnkomanActorNumber);
186
+
187
+
188
+
189
+ if (CameraActorNumber == UnkomanActorNumber)
190
+
191
+ {
192
+
193
+ Debug.Log("めい怖くないもん!!");
194
+
195
+ target = Unkoman;
196
+
197
+ }
198
+
199
+ }
200
+
201
+ Debug.Log(target);
202
+
203
+ }
204
+
205
+
206
+
207
+ void LateUpdate()
208
+
209
+ {
210
+
211
+ if (!photonView.IsMine || target == null) return;
212
+
213
+
214
+
215
+ if (photonView.IsMine) Debug.Log(target);
216
+
217
+ updateAngle(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y"));
218
+
219
+ var lookAtPos = target.transform.position + offset;
220
+
221
+ updatePosition(lookAtPos);
222
+
223
+ transform.LookAt(lookAtPos);
224
+
225
+
226
+
227
+ /*
228
+
229
+ //カーソル表示・非表示&ロック・アンロック
230
+
231
+ if (Input.GetKeyUp(KeyCode.Escape))
232
+
233
+ {
234
+
235
+ Cursor.visible = true;
236
+
237
+ Cursor.lockState = CursorLockMode.None;
238
+
239
+ }
240
+
241
+ if(Input.GetMouseButtonDown(0))
242
+
243
+ {
244
+
245
+ Cursor.visible = false;
246
+
247
+ Cursor.lockState = CursorLockMode.Locked;
248
+
249
+ }
250
+
251
+ */
252
+
253
+ }
254
+
255
+
256
+
257
+ void updateAngle(float x, float y)
258
+
259
+ {
260
+
261
+ if (!photonView.IsMine || target == null) return;
262
+
263
+ x = azimuthalAngle - x * mouseXSensitivity;
264
+
265
+ azimuthalAngle = Mathf.Repeat(x, 360);
266
+
267
+
268
+
269
+ y = polarAngle + y * mouseYSensitivity;
270
+
271
+ polarAngle = Mathf.Clamp(y, minPolarAngle, maxPolarAngle);
272
+
273
+ }
274
+
275
+
276
+
277
+
278
+
279
+ void updatePosition(Vector3 lookAtPos)
280
+
281
+ {
282
+
283
+ if (!photonView.IsMine || target == null) return;
284
+
285
+ var da = azimuthalAngle * Mathf.Deg2Rad;
286
+
287
+ var dp = polarAngle * Mathf.Deg2Rad;
288
+
289
+ transform.position = new Vector3
290
+
291
+ (
292
+
293
+ lookAtPos.x + distance * Mathf.Sin(dp) * Mathf.Cos(da),
294
+
295
+ lookAtPos.y + distance * Mathf.Cos(dp),
296
+
297
+ lookAtPos.z + distance * Mathf.Sin(dp) * Mathf.Sin(da)
298
+
299
+ );
300
+
301
+
302
+
303
+ }
304
+
305
+ }
306
+
307
+ }
308
+
309
+ ```
310
+
39
311
 
40
312
 
41
313
  ### 試したこと
42
314
 
43
- 自分で考えてみて、カメラ側のコードとプレイヤー側のコードを次のように書けばうまく取得できるかなと思いました。
315
+
44
-
45
- ```カメラ側のコード
316
+
46
-
47
- //カメラ側のコード
48
-
49
- void LateUpdate()
50
-
51
- {
52
-
53
- foreach(GameObject Unkoman in GameObject.FindGameObjectsWithTag("Player"))
54
-
55
- {
56
-
57
- GameObject UnkomanIns = Unkoman.GetComponent<UnkomanControl>().Unkoman;
58
-
59
- if (UnkomanIns != null) target = UnkomanIns;
60
-
61
- }
62
-
63
- if(photonView.IsMine) Debug.Log(target);
64
-
65
- }
66
-
67
- ```
68
-
69
- ```プレイヤー側のコード
70
-
71
- //プレイヤー側のコード
72
-
73
- void Start()
74
-
75
- {
76
-
77
- if (photonView.IsMine) Unkoman = this.gameObject;
78
-
79
- }
80
-
81
- ```
82
-
83
- Update内でGetComponentしているという問題点がありますが、とりあえず一旦思ったとおりに動くか試してみました。
84
-
85
- ですがこれだと、実行するのが一人だけの場合は問題なく追従してくれるのですが、二人目のプレイヤーがはいってきた途端、カメラが追従しなくなるという挙動をしました。
86
-
87
- Debug.Logで確認してもtarget変数の中には常にプレイヤーキャラObjが代入された状態でした。
317
+ ブレークポイント止めて変数の中身を確認しましたがどちらの変数も同じ数字でした。
88
-
89
- にもかかわらず、プレイヤーが複数になった瞬間、カメラが追従しなくなりました。
318
+
90
-
91
- また追従しなくなったのは、最初に開始したプレで、二人目のプレイヤーは問題なくカメラが追従していました。
319
+ ![ジ説明](0fbc53e4dd80ac3dcc5736eac8f3821e.png)
320
+
321
+
92
322
 
93
323
  ### 補足情報(FW/ツールのバージョンなど)
94
324
 

4

タイトルに誤字があったので修正しました

2020/08/20 01:01

投稿

kosho206
kosho206

スコア41

test CHANGED
@@ -1 +1 @@
1
- 【Unity】Photonで自身のインスタンスのネットワークオブジェクトをコードから取得したです
1
+ 【Unity】Photonで自身のインスタンスのネットワークオブジェクトをコードから取得したです
test CHANGED
File without changes

3

試したことの説明の文で、言葉に語弊があったので修正しました

2020/08/09 03:01

投稿

kosho206
kosho206

スコア41

test CHANGED
File without changes
test CHANGED
@@ -82,7 +82,7 @@
82
82
 
83
83
  Update内でGetComponentしているという問題点がありますが、とりあえず一旦思ったとおりに動くか試してみました。
84
84
 
85
- ですがこれだと、実行するのが一人だけの場合は問題なく取得できるのですが、二人目のプレイヤーがはいってきた途端、カメラが追従しなくなるという挙動をしました。
85
+ ですがこれだと、実行するのが一人だけの場合は問題なく追従してくれるのですが、二人目のプレイヤーがはいってきた途端、カメラが追従しなくなるという挙動をしました。
86
86
 
87
87
  Debug.Logで確認しても、target変数の中には常にプレイヤーキャラObjが代入された状態でした。
88
88
 

2

エラーメッセージは出ていないという文を追加しました

2020/08/08 22:03

投稿

kosho206
kosho206

スコア41

test CHANGED
File without changes
test CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  ```
22
22
 
23
- エラーメッセージ
23
+ エラーメッセージは出ていません。
24
24
 
25
25
  ```
26
26
 

1

突っ込まれる可能性があったので、「Update内でGetComponentしているという問題点がありますが、とりあえず一旦思ったとおりに動くか試してみました。」という文章を追加しました。

2020/08/08 08:13

投稿

kosho206
kosho206

スコア41

test CHANGED
File without changes
test CHANGED
@@ -80,6 +80,8 @@
80
80
 
81
81
  ```
82
82
 
83
+ Update内でGetComponentしているという問題点がありますが、とりあえず一旦思ったとおりに動くか試してみました。
84
+
83
85
  ですがこれだと、実行するのが一人だけの場合は問題なく取得できるのですが、二人目のプレイヤーがはいってきた途端、カメラが追従しなくなるという挙動をしました。
84
86
 
85
87
  Debug.Logで確認しても、target変数の中には常にプレイヤーキャラObjが代入された状態でした。