当场景中存在多个摄像机时,如何在统一网络中引用主摄像机的本地实例。每个玩家一个

时间:2018-11-05 07:26:25

标签: c# unity3d networking unityscript

我正在使用网络统一制作多人游戏。它使用网络管理器,网络管理器HUD和网络标识。当我更多地了解团结时,可能会有更多的组件。问题是,在我的播放器对象通过网络管理器产生之前,主摄像机会在菜单中产生。因此,lookAt变量未正确分配。播放器生成后,我想通过相机脚本或播放器脚本进行分配。问题是,启动和运行游戏时,游戏中将有4个玩家预制件和4个主摄像头。我尝试过的所有操作都只是重新分配了相机的所有lookAt变量。如何仅将本地摄像机的lookAt分配给本地播放器?

  • 这是第三人称游戏
  • 我真的不想让相机成为玩家预制的孩子,这会弄乱我游戏的其他部分。

1 个答案:

答案 0 :(得分:1)

不要对每个玩家都使用主摄像机,在任何给定时间,场景中始终应该只有1个主摄像机处于活动状态(因此称为“ ”摄像机)。因此,如果您尝试拨打Camera.Main,则它将呼叫所有主要摄像机,而不仅仅是播放器。

我认为,实现所需目标的最佳方法是制作一台摄像机的预制件(不是标记为MainCamera 并放入您的摄像机脚本(如果有的话)或您希望在该预制件上的相机上使用的其他任何组件。

然后,当播放器生成时,您会实例化预制件,以单独为该播放器创建相机预制件的实例,并且仅在该播放器的实例相机上使用LookAt

类似于以下内容:

public GameObject cameraPrefab; //prefab of the camera you want to instance
private Camera playerCam; //this is gonna be a reference to the camera that looks at the player
void SpawnPlayer()
{
    playerCam = Instantiate(cameraPrefab).GetComponent<Camera>(); //instantiate the cameraPrefab and get the camera component of it
    playerCam.transform.LookAt(transform); //get the transform of the instanced camera to look at the transform on which this script is run (In this case assuming your player)
}