我正在制作2D游戏,问题在于当第一个玩家创建并出现在房间中时,他的摄像机正常工作,但当新玩家进入房间后,第一个玩家通过第二个玩家的摄像机看到了一切。此外,如果第三个玩家连接,第一个和第二个玩家将通过第三个玩家的摄像机看到所有内容,以此类推。
玩家预制体实例化在GameManager类中,该类仅存在于游戏场景中。
public class GameManager : MonoBehaviourPunCallbacks
{
public GameObject playerPrefab;
public Transform spawnPoint;
public void Start()
{
GameObject player = PhotonNetwork.Instantiate(this.playerPrefab.name, spawnPoint.position, Quaternion.identity);
player.GetComponent<FireFighterHeroController>().enabled = true;
player.GetComponent<CameraControler>().enabled = true;
player.GetComponent<CameraControler>().SetTarget(player.transform);
}
#region PUN Callbacks
public override void OnLeftRoom()
{
SceneManager.LoadScene(1);
}
#endregion
#region Custom Methods
public void OnClickLeaveRoom_Btn()
{
PhotonNetwork.LeaveRoom();
}
#endregion
}
简单的照相机控制器
public class CameraControler : MonoBehaviour
{
private Transform target;
public GameObject camera;
public Vector3 offset;
public void SetTarget(Transform target)
{
this.target = target;
}
public void LateUpdate()
{
camera.transform.position = target.position + offset;
}
}
更新:找到了解决方法
我将摄像机控制器的脚本移动到了玩家的摄像机上,然后在玩家实例中搜索这个摄像机,开启它并将玩家的变换传递给它。
不确定这种方法是否可行,但至少可以工作。
这就是那只“怪兽”。
public class GameManager : MonoBehaviourPunCallbacks
{
public Transform spawnPoint;
public void Start()
{
GameObject player = PhotonNetwork.Instantiate("Player", spawnPoint.position, Quaternion.identity);
if (!player.GetPhotonView().IsMine)
return;
player.GetComponent<FireFighterHeroController>().enabled = true;
player.transform.Find("Camera").gameObject.GetComponent<CameraControler>().enabled = true;
player.transform.Find("Camera").gameObject.GetComponent<CameraControler>().SetTarget(player.transform);
player.transform.Find("Camera").gameObject.SetActive(true);
}
}
相机控制器
public class CameraControler : MonoBehaviour
{
private Transform target;
public Vector3 offset;
public void SetTarget(Transform target)
{
this.target = target;
}
public void LateUpdate()
{
gameObject.transform.position = target.position + offset;
}
}
player.GetPhotonView().IsMine
吗?你也可以将与相机控制器相关的3行代码移动到你的玩家Monobehaviour中,以达到同样的效果。我已经更新了答案。 - Jack Mariani