代码之家  ›  专栏  ›  技术社区  ›  Rumata

需要澄清一件事在这个AR多人教程

  •  5
  • Rumata  · 技术社区  · 6 年前

    我正在试用简单的AR多人游戏应用程序,使用本教程制作:

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

    SourceCode

    真管用!但我不确定,为什么两个对象的实例化方式不同:月亮和玩家。

    为什么“玩家”的游戏对象仍然附着在用户的手机上,而“月亮”仍然附着在房间的某个位置上?为什么实例化后月亮的位置和玩家不一样?

    它们都用相同的命令实例化:

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

    如果它们的实例化代码是相同的,那么位置上的差异是否与这些预置本身有关?究竟是什么原因造成的?

    1 回复  |  直到 4 年前
        1
  •  3
  •   derHugo    6 年前

    再看一下 17:16 !

    不同之处不在于实例化,而在于实例化对象(预制件)所附加的组件:

    MoonController PlayerController (玩家使用)


    卫星控制器 基本上除了注册月球什么都不做:

    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);
    }
    

    总是设置为 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;
    
            // The player should have the same transform as the camera
            gameObject.transform.position = CameraTransform.position;
            gameObject.transform.rotation = CameraTransform.rotation;
        }
    }

    因此,在实例化两个对象后的第一帧中,Player对象已经在摄影机的位置和旋转上,而月亮仍然在它的实例化点上 0,0,0