前回の記事でアニメーションの同期を行いました。
今回の記事では、カメラをそれぞれのプレイヤーに追随するように設定していきたいと思います。
目次
Main CameraのPrefab化
まずは、[Main Camera]をPrefab化します。
保存場所は、どこでも大丈夫です。
そして、Hierarchyから[Main Camera]を削除します。
PhotonSystemの改良
メンバー変数の追加
[Main Camera]を入れるために変数を追加します。メンバー変数として、GameObject型のCameraPrefabを宣言します。
[public GameObject CameraPrefab;]
OnJoinedRoom()の改良
OnJoinedRoom()にカメラを生成するコードを追加します。
void OnJoinedRoom() { Debug.Log("部屋に入室"); Instantiate(CameraPrefab, new Vector3(0f, 0f, -10f), Quaternion.identity); PhotonNetwork.Instantiate("DemoUnityChan2D", new Vector3(0f, 0f, 0f), Quaternion.identity, 0);/ }
追加したのは[ Instantiate(CameraPrefab, new Vector3(0f, 0f, -10f), Quaternion.identity);]部分です。
CameraPrefabにMain CameraのPrefabを追加
CameraControllerの改良
メソッドの追加
[StopPositionSet()メソッドを追加します]public void StopPositionSet() { stopPosition = GameObject.Find("StopPosition").transform; }
LateUpdate()の改良
LateUpdate()を書きのように変更します。
void LateUpdate() { var right = m_camera.ViewportToWorldPoint(Vector2.right); var center = m_camera.ViewportToWorldPoint(Vector2.one * 0.5f); if (target != null) { if (center.x < target.position.x) { var pos = m_camera.transform.position; if (Math.Abs(pos.x - target.position.x) >= 0.0000001f) { m_camera.transform.position = new Vector3(target.position.x, pos.y, pos.z); } } if (stopPosition.position.x - right.x < 0) { StartCoroutine(INTERNAL_Clear()); enabled = false; } } else { if (GameObject.FindGameObjectWithTag("Player") != null) { target = GameObject.FindGameObjectWithTag("Player").transform; } } }
Awake()の改良
Awake()メソッドに先ほど追加した[StopPositionSet()]を書き足します。
void Awake() { m_camera = GetComponent<Camera>(); StopPositionSet(); }
動作確認
ここまでの作業を行うと、動きもアニメーションもカメラもそれぞれのプレイヤーに合わせて動くと思います。
まとめ
これで、簡単オンラインゲーム開発!!UnityとPhotonCloudで簡単実装シリーズは終わります。
明日あたりに、自分で作ったProjectをGitHubにアップロードしますので、もし動かない人はそれをダウンロードして実行してみてください。
Photon関係で、自分が作成したものをみなさんがダウンロードして実行しても、起動しないとわかったので、配布はしないことにしました。
申し訳ないです。
では。
コメント
とても参考になります。
ありがとうございます!