Как сослаться на локальный экземпляр основной камеры в единой сети, когда в сцене больше одного. Один на игрока

Я делаю многопользовательскую игру в единстве, в которой используется сеть. Он использует сетевой менеджер, сетевой менеджер HUD и сетевой идентификатор. Возможно, больше компонентов, когда я узнаю больше о единстве. Проблема в том, что основная камера появляется в меню до того, как объект моего плеера появляется через сетевой менеджер. Значит, переменная lookAt назначена неправильно. Я хочу назначить его либо через сценарий камеры, либо через сценарий игрока после того, как игрок появится. Проблема в том, что в игре есть сборные для 4 игроков и 4 основные камеры, когда она запущена и работает. Все, что я пробовал, просто переназначает ВСЕ переменные lookAt камеры. Как мне назначить внешний вид моей локальной камеры моему локальному плееру?

  • Это игра от третьего лица
  • Я действительно не хочу делать камеру дочерним элементом префаба игрока, это испортит другие части моей игры.

person Johnny Lin    schedule 05.11.2018    source источник


Ответы (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)
}
person Remy    schedule 05.11.2018