需要在此AR多人游戏教程中阐明一件事

时间:2018-09-16 22:44:13

标签: c# unity3d augmented-reality arkit

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

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

SourceCode

有效!但是我不确定为什么为什么用相同方式实例化的两个对象的位置不同:月亮和玩家。

为什么“ Player”游戏对象仍附加在用户的手机上,而“ Moon”则仍附加在房间中的某个位置?为什么实例化之后的月亮位置与播放器不同?

这两个命令都使用相同的命令实例化:

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

如果两者的实例化代码相同,那么定位的差异是否与这些预制件本身有关?到底是什么原因造成的?

感谢您的帮助,在此先感谢您!

1 个答案:

答案 0 :(得分:3)

再次浏览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方法(在此应用程序中为“ Camera = Players Smartphone”)设置为相机的rotationUpdate。我将重要的行标记为粗体:

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对象已经在Camera的位置和旋转上,而Moon保留在其实例化点0,0,0上。