前提・実現したいこと
これはPhotonでマルチプレイヤーゲームを作るためのコードです。
カメラをプレイヤーオブジェクトに追従させるための処理で問題が発生しています。
下記コードのforeach文内のif文が実行されません。
Debug.Logで確認しましたが、if文の条件になっている2つの変数はどちらも同じ数字でした。
変数が同じ数字なのにも関わらず、if文が実行されずに困っています。
if文が実行されない原因は、このスクリプトにありますか?
それとも、この質問に載せたコードを見る限りでは特に問題はなく、他のスクリプトなどに原因がある可能性が高いですか?
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
こちらが、いま問題が起きているコードです。
void Awake() { if (!photonView.IsMine) return; Debug.Log("UnkomanCameraControl:Awake"); StartCoroutine(GetTarget(0.5f)); } //一定時間立ってからtargetを取得 private IEnumerator GetTarget(float i_time) { yield return new WaitForSeconds(i_time); foreach (GameObject Unkoman in GameObject.FindGameObjectsWithTag("Player")) { object CameraActorNumber = photonView.InstantiationData[0]; object UnkomanActorNumber = Unkoman.GetComponent<UnkomanControl>().unkomanActorNumber; Debug.Log(CameraActorNumber); Debug.Log(UnkomanActorNumber); if (CameraActorNumber == UnkomanActorNumber) { Debug.Log("めい怖くないもん!!"); target = Unkoman; } } Debug.Log(target); }
こちらが、いま問題になっているコードを含めた、スクリプトの全文です。
using System.Collections; using System.Collections.Generic; using UnityEngine; using Photon.Pun; using Photon.Realtime; namespace CSharpScript { // [ExecuteInEditMode, DisallowMultipleComponent] public class UnkomanCameraControl : MonoBehaviourPunCallbacks { private GameObject target; public Vector3 offset; [SerializeField] private float distance = 4.0f; [SerializeField] private float polarAngle = 87.0f; [SerializeField] private float azimuthalAngle = 270f; [SerializeField] private float minPolarAngle = 2.0f; [SerializeField] private float maxPolarAngle = 130.0f; [SerializeField] private float mouseXSensitivity = 5.0f; [SerializeField] private float mouseYSensitivity = 5.0f; void Awake() { if (!photonView.IsMine) return; Debug.Log("UnkomanCameraControl:Awake"); StartCoroutine(GetTarget(0.5f)); } //一定時間立ってからtargetを取得 private IEnumerator GetTarget(float i_time) { yield return new WaitForSeconds(i_time); foreach (GameObject Unkoman in GameObject.FindGameObjectsWithTag("Player")) { object CameraActorNumber = photonView.InstantiationData[0]; object UnkomanActorNumber = Unkoman.GetComponent<UnkomanControl>().unkomanActorNumber; Debug.Log(CameraActorNumber); Debug.Log(UnkomanActorNumber); if (CameraActorNumber == UnkomanActorNumber) { Debug.Log("めい怖くないもん!!"); target = Unkoman; } } Debug.Log(target); } void LateUpdate() { if (!photonView.IsMine || target == null) return; if (photonView.IsMine) Debug.Log(target); updateAngle(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y")); var lookAtPos = target.transform.position + offset; updatePosition(lookAtPos); transform.LookAt(lookAtPos); /* //カーソル表示・非表示&ロック・アンロック if (Input.GetKeyUp(KeyCode.Escape)) { Cursor.visible = true; Cursor.lockState = CursorLockMode.None; } if(Input.GetMouseButtonDown(0)) { Cursor.visible = false; Cursor.lockState = CursorLockMode.Locked; } */ } void updateAngle(float x, float y) { if (!photonView.IsMine || target == null) return; x = azimuthalAngle - x * mouseXSensitivity; azimuthalAngle = Mathf.Repeat(x, 360); y = polarAngle + y * mouseYSensitivity; polarAngle = Mathf.Clamp(y, minPolarAngle, maxPolarAngle); } void updatePosition(Vector3 lookAtPos) { if (!photonView.IsMine || target == null) return; var da = azimuthalAngle * Mathf.Deg2Rad; var dp = polarAngle * Mathf.Deg2Rad; transform.position = new Vector3 ( lookAtPos.x + distance * Mathf.Sin(dp) * Mathf.Cos(da), lookAtPos.y + distance * Mathf.Cos(dp), lookAtPos.z + distance * Mathf.Sin(dp) * Mathf.Sin(da) ); } } }
試したこと
ブレークポイントで止めて変数の中身を確認しましたが、どちらの変数も同じ数字でした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー