質問: ### 前提 MonobitEngineを利用してOnlineゲームを開発しています。 ### 問題と現状 MonobitEngineにはネットワーク上にオブジェクトを生成するという機能である ``` MonobitEngine.MonobitNetowork.Instantiate("オブジェクトの名前",座標,角度); ``` が存在しそれを使ってプレイヤーを同期処理の対象にして(ネットワーク上に生成すると同期処理ができるようになる)Recorces直下のPrefabからInstantiateしています。 なお、プレイヤーPrefabの中にはMain Cameraが子要素として存在しています。 ### 問題 2人がログインするとカメラが2つ存在することになる。 Aはうまく動くが、BはAのカメラの画像を映してしまう・・・ 具体的に赤がA、青がBだとすると以下の画像のようになる 本来のA&実際のA(赤) - うまく表示されている ![本来のA&実際のA](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/276d5a5fa2059722d90694eb19ecd2e5.png) 本来のB(青) ![本来のB](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/fb62ff13be19b13bda587b66594e0cae.png) 実際のB(青) ![実際のB](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/276d5a5fa2059722d90694eb19ecd2e5.png) ### 取り組んだこと Depthを変更したり、シーン内に元々カメラを配置しておき、各プレイヤーに割り当てるという方法を取ったのですが、どれも失敗に終わりました。 ### 気をつけなければならないこと 検証の結果、ネットワーク越しにInstantiateしたオブジェクトは、子要素も同期処理の対象に入っており、AのプレイヤーのCameraのDepthを単に大きくするだけでは、Bの画面でもAのカメラが存在し、Depthが大きくなることに注意しなければなりません (つД`)ノ
回答: プレイヤーの子要素にカメラがあるというのは、カメラにプレイヤーを追従させたいからですよね? なら、カメラを子要素にせず、このようなスクリプトでカメラを動かせばよいのではないでしょうか。 ``` using System.Collections; using System.Collections.Generic; using UnityEngine; public class Teratail : MonoBehaviour { public Transform player; void Start() { } void Update() { transform.position = player.position; transform.rotation = player.rotation; } } ``` 引きでプレイヤーを見たいのなら、 transform.position = player.position - player.forward * x; とすれば常にカメラはxメートル後ろからプレイヤーを映すことになります。 これで、シーン上にカメラは1つだけになります。