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

質問編集履歴

6

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

2020/08/20 01:11

投稿

kosho206
kosho206

スコア41

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,6 @@
1
1
  ### 前提・実現したいこと
2
+ これはPhotonでマルチプレイヤーゲームを作るためのコードです。
3
+ カメラをプレイヤーオブジェクトに追従させるための処理で問題が発生しています。
2
4
 
3
5
  下記コードのforeach文内のif文が実行されません。
4
6
  Debug.Logで確認しましたが、if文の条件になっている2つの変数はどちらも同じ数字でした。

5

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

2020/08/20 01:11

投稿

kosho206
kosho206

スコア41

title CHANGED
@@ -1,1 +1,1 @@
1
- 【Unity】Photonで自身インスタンスネットワークオブジェクトをコードから取得した
1
+ 【Unity】Photonの処理if文条件があっているはずなに、実行されずに困って
body CHANGED
@@ -1,49 +1,164 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- 今、プレイヤキャラObjとカメラネットワークオブジェクトとしてあり
3
+ 下記コドのforeach文内のif文実行されせん
4
+ Debug.Logで確認しましたが、if文の条件になっている2つの変数はどちらも同じ数字でした。
4
- カメラはプレイヤーキャラObj追従するようっています。
5
+ 変数が同じ数字なのも関わらず、if文が実行されずっています。
5
- 追従するために、カメラ側のコードでプレイヤーキャラObjを取得したいです。
6
- そして、今作っているのはマルチプレイゲームなので、カメラがプレイヤーキャラObjを取得する時は、自身のインスタンスのObjのみを取得するようにしたいです。
7
6
 
8
- です、そのためにはどんコードを書けば良いのかがわかりません。
7
+ if文実行されない原因は、こスクリプトにありますか?
8
+ それとも、この質問に載せたコードを見る限りでは特に問題はなく、他のスクリプトなどに原因がある可能性が高いですか?
9
+
9
10
  ### 発生している問題・エラーメッセージ
10
11
 
11
12
  ```
12
- エラーメッセージは出ていません。
13
+ エラーメッセージ
13
14
  ```
14
15
 
15
16
  ### 該当のソースコード
16
17
 
18
+
19
+ こちらが、いま問題が起きているコードです。
17
20
  ```ここに言語名を入力
18
- ソースコード
21
+ void Awake()
22
+ {
23
+ if (!photonView.IsMine) return;
24
+ Debug.Log("UnkomanCameraControl:Awake");
25
+ StartCoroutine(GetTarget(0.5f));
26
+ }
27
+
28
+ //一定時間立ってからtargetを取得
29
+ private IEnumerator GetTarget(float i_time)
30
+ {
31
+ yield return new WaitForSeconds(i_time);
32
+
33
+ foreach (GameObject Unkoman in GameObject.FindGameObjectsWithTag("Player"))
34
+ {
35
+ object CameraActorNumber = photonView.InstantiationData[0];
36
+ object UnkomanActorNumber = Unkoman.GetComponent<UnkomanControl>().unkomanActorNumber;
37
+
38
+ Debug.Log(CameraActorNumber);
39
+ Debug.Log(UnkomanActorNumber);
40
+
41
+ if (CameraActorNumber == UnkomanActorNumber)
42
+ {
43
+ Debug.Log("めい怖くないもん!!");
44
+ target = Unkoman;
45
+ }
46
+ }
47
+ Debug.Log(target);
48
+ }
19
49
  ```
50
+ こちらが、いま問題になっているコードを含めた、スクリプトの全文です。
51
+ ```ここに言語を入力
52
+ using System.Collections;
53
+ using System.Collections.Generic;
54
+ using UnityEngine;
55
+ using Photon.Pun;
56
+ using Photon.Realtime;
20
57
 
21
- ### 試したこと
22
- 自分で考えてみて、カメラ側のコードとプレイヤー側のコードを次のように書けばうまく取得できるかなと思いました。
23
- ```カメラ側のコード
24
- //カメラ側のコード
25
- void LateUpdate()
58
+ namespace CSharpScript
26
59
  {
60
+ // [ExecuteInEditMode, DisallowMultipleComponent]
61
+ public class UnkomanCameraControl : MonoBehaviourPunCallbacks
62
+ {
63
+ private GameObject target;
64
+ public Vector3 offset;
65
+
66
+ [SerializeField] private float distance = 4.0f;
67
+ [SerializeField] private float polarAngle = 87.0f;
68
+ [SerializeField] private float azimuthalAngle = 270f;
69
+
70
+ [SerializeField] private float minPolarAngle = 2.0f;
71
+ [SerializeField] private float maxPolarAngle = 130.0f;
72
+ [SerializeField] private float mouseXSensitivity = 5.0f;
73
+ [SerializeField] private float mouseYSensitivity = 5.0f;
74
+
75
+ void Awake()
76
+ {
77
+ if (!photonView.IsMine) return;
78
+ Debug.Log("UnkomanCameraControl:Awake");
79
+ StartCoroutine(GetTarget(0.5f));
80
+ }
81
+
82
+ //一定時間立ってからtargetを取得
83
+ private IEnumerator GetTarget(float i_time)
84
+ {
85
+ yield return new WaitForSeconds(i_time);
86
+
27
- foreach(GameObject Unkoman in GameObject.FindGameObjectsWithTag("Player"))
87
+ foreach (GameObject Unkoman in GameObject.FindGameObjectsWithTag("Player"))
28
88
  {
89
+ object CameraActorNumber = photonView.InstantiationData[0];
29
- GameObject UnkomanIns = Unkoman.GetComponent<UnkomanControl>().Unkoman;
90
+ object UnkomanActorNumber = Unkoman.GetComponent<UnkomanControl>().unkomanActorNumber;
91
+
92
+ Debug.Log(CameraActorNumber);
93
+ Debug.Log(UnkomanActorNumber);
94
+
30
- if (UnkomanIns != null) target = UnkomanIns;
95
+ if (CameraActorNumber == UnkomanActorNumber)
96
+ {
97
+ Debug.Log("めい怖くないもん!!");
98
+ target = Unkoman;
99
+ }
31
100
  }
101
+ Debug.Log(target);
102
+ }
103
+
104
+ void LateUpdate()
105
+ {
106
+ if (!photonView.IsMine || target == null) return;
107
+
32
- if(photonView.IsMine) Debug.Log(target);
108
+ if (photonView.IsMine) Debug.Log(target);
109
+ updateAngle(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y"));
110
+ var lookAtPos = target.transform.position + offset;
111
+ updatePosition(lookAtPos);
112
+ transform.LookAt(lookAtPos);
113
+
114
+ /*
115
+ //カーソル表示・非表示&ロック・アンロック
116
+ if (Input.GetKeyUp(KeyCode.Escape))
117
+ {
118
+ Cursor.visible = true;
119
+ Cursor.lockState = CursorLockMode.None;
120
+ }
121
+ if(Input.GetMouseButtonDown(0))
122
+ {
123
+ Cursor.visible = false;
124
+ Cursor.lockState = CursorLockMode.Locked;
125
+ }
126
+ */
127
+ }
128
+
129
+ void updateAngle(float x, float y)
130
+ {
131
+ if (!photonView.IsMine || target == null) return;
132
+ x = azimuthalAngle - x * mouseXSensitivity;
133
+ azimuthalAngle = Mathf.Repeat(x, 360);
134
+
135
+ y = polarAngle + y * mouseYSensitivity;
136
+ polarAngle = Mathf.Clamp(y, minPolarAngle, maxPolarAngle);
137
+ }
138
+
139
+
140
+ void updatePosition(Vector3 lookAtPos)
141
+ {
142
+ if (!photonView.IsMine || target == null) return;
143
+ var da = azimuthalAngle * Mathf.Deg2Rad;
144
+ var dp = polarAngle * Mathf.Deg2Rad;
145
+ transform.position = new Vector3
146
+ (
147
+ lookAtPos.x + distance * Mathf.Sin(dp) * Mathf.Cos(da),
148
+ lookAtPos.y + distance * Mathf.Cos(dp),
149
+ lookAtPos.z + distance * Mathf.Sin(dp) * Mathf.Sin(da)
150
+ );
151
+
152
+ }
153
+ }
33
154
  }
34
155
  ```
35
- ```プレイヤー側のコード
156
+
36
- //プレイヤー側のコード
37
- void Start()
157
+ ### 試したこと
38
- {
158
+
39
- if (photonView.IsMine) Unkoman = this.gameObject;
40
- }
41
- ```
42
- Update内でGetComponentしているという問題点がありますが、とりあえず一旦思ったとおりに動くか試してみました。
43
- ですがこれだと、実行するのが一人だけの場合は問題なく追従してくれるのですが、二人目のプレイヤーがはいってきた途端、カメラが追従しなくなるという挙動をしました。
44
- Debug.Log確認しも、target変数の中には常にプレイヤーキャラObjが代入され状態でした。
159
+ ブレークポイント止めて変数の中身を確認しましが、どちらの変数も同じ数字でした。
45
- にもかかわらず、プレイヤーが複数になった瞬間、カメラが追従しなくなりました。
46
- また追従しなくなったのは、最初に開始したプレヤーで、二人目のプレイヤーは問題なくカラが追従していました。
160
+ ![イメージ説明](0fbc53e4dd80ac3dcc5736eac8f3821e.png)
161
+
47
162
  ### 補足情報(FW/ツールのバージョンなど)
48
163
 
49
164
  ここにより詳細な情報を記載してください。

4

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

2020/08/20 01:01

投稿

kosho206
kosho206

スコア41

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

3

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

2020/08/09 03:01

投稿

kosho206
kosho206

スコア41

title CHANGED
File without changes
body CHANGED
@@ -40,7 +40,7 @@
40
40
  }
41
41
  ```
42
42
  Update内でGetComponentしているという問題点がありますが、とりあえず一旦思ったとおりに動くか試してみました。
43
- ですがこれだと、実行するのが一人だけの場合は問題なく取得できるのですが、二人目のプレイヤーがはいってきた途端、カメラが追従しなくなるという挙動をしました。
43
+ ですがこれだと、実行するのが一人だけの場合は問題なく追従してくれるのですが、二人目のプレイヤーがはいってきた途端、カメラが追従しなくなるという挙動をしました。
44
44
  Debug.Logで確認しても、target変数の中には常にプレイヤーキャラObjが代入された状態でした。
45
45
  にもかかわらず、プレイヤーが複数になった瞬間、カメラが追従しなくなりました。
46
46
  また追従しなくなったのは、最初に開始したプレイヤーで、二人目のプレイヤーは問題なくカメラが追従していました。

2

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

2020/08/08 22:03

投稿

kosho206
kosho206

スコア41

title CHANGED
File without changes
body CHANGED
@@ -9,7 +9,7 @@
9
9
  ### 発生している問題・エラーメッセージ
10
10
 
11
11
  ```
12
- エラーメッセージ
12
+ エラーメッセージは出ていません。
13
13
  ```
14
14
 
15
15
  ### 該当のソースコード

1

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

2020/08/08 08:13

投稿

kosho206
kosho206

スコア41

title CHANGED
File without changes
body CHANGED
@@ -39,6 +39,7 @@
39
39
  if (photonView.IsMine) Unkoman = this.gameObject;
40
40
  }
41
41
  ```
42
+ Update内でGetComponentしているという問題点がありますが、とりあえず一旦思ったとおりに動くか試してみました。
42
43
  ですがこれだと、実行するのが一人だけの場合は問題なく取得できるのですが、二人目のプレイヤーがはいってきた途端、カメラが追従しなくなるという挙動をしました。
43
44
  Debug.Logで確認しても、target変数の中には常にプレイヤーキャラObjが代入された状態でした。
44
45
  にもかかわらず、プレイヤーが複数になった瞬間、カメラが追従しなくなりました。