Нужно уточнить одну вещь в этом многопользовательском уроке AR - PullRequest
0 голосов
/ 17 сентября 2018

Я экспериментирую с простым многопользовательским приложением AR, созданным с помощью этого урока:

https://www.youtube.com/watch?v=n3a-aaSYR8s

SourceCode

Это работает!Но я не уверен, почему 2 объекта, которые были созданы одинаково, расположены по-разному: Луна и игрок.

Почему игровой объект "Игрок" остается прикрепленным к телефону пользователя, тогда как "Луна"остается привязанным к некоторому месту в комнате?И почему местоположение Луны после создания экземпляра не совпадает с положением Игрока?

Оба они создаются с помощью одной и той же команды:

PhotonNetwork.Instantiate ("SampleMoon", Vector3.zero, Quaternion.identity, 0);

Если код создания экземпляра совпадаетдля них обоих разница в позиционировании как-то связана с этими сборными?Чем именно это вызвано?

Буду благодарен за помощь, заранее спасибо!

1 Ответ

0 голосов
/ 17 сентября 2018

Посмотрите снова на видео с 17: 16 !

Разница не в экземпляре, а в компонентах, к которым прикреплены созданные объекты (префабы):

MoonController (используется Луной) против PlayerController (используется Игроком)


В то время как MoonController в основном ничего не делает, кроме регистрации Луны:

void Start () 
{
    // Register this object to the current game controller.
    // This is important so that all clients have a reference to this object.
    GameController.Instance.RegisterMoon (this);
}

PlayerController всегда устанавливается на position и rotation камеры в Update метод (в этом приложении «Камера = Плеер Смартфон»).Я выделил значимые линии жирным шрифтом:

public Transform CameraTransform;

    private void Start ()
    {
        CameraTransform = FindObjectOfType ().transform;
        // Register this player to the GameController. 
        // Important: all clients must have a reference to this player.
        GameController.Instance.RegisterPlayer (this);

        // Hide your own model if you are the local client.
        if (photonView.isMine)
            gameObject.transform.GetChild (0).gameObject.SetActive (false);
    }

    void Update () 
    {
        // If this player is not being controlled by the local client
        // then do not update its position. Each client is responsible to update
        // its own player.
        if (!photonView.isMine && PhotonNetwork.connected)
            return;

        <b>// The player should have the same transform as the camera
        gameObject.transform.position = CameraTransform.position;
        gameObject.transform.rotation = CameraTransform.rotation;</b>
    }
}

Таким образом, в первом кадре после создания экземпляров обоих объектов объект Player уже находится в положении и повороте Камеры, в то время как Луна остается в своей точке создания * 1031.*.

...