Unity 多人连网(Multiplayer Networking)简单个人总结,玩家独立相机跟踪

Unity 多人连网(Multiplayer Networking)简单个人总结。

官网教程:Multiplayer Networking
Github相关工程代码:NetworkProject

  Unity自带的Networking是非常神奇的东西。可以将一个工程同时当客户端、服务器使用,包括数据同步,都可以直接写在一起,只要标记好特性,添加相关组件即可。但这东西做点局域网游戏就好了,毕竟问题还是不少的,见知乎这里。


1. 使用Multiplayer Networking 以及 High Level API (HLAPI),来作为基础框架。可以实现服务器和客户端同时间,同对象,调用相同脚本的相同代码。

2. 可以实现RPC(Remote Procedure Call Protocol,远程过程调用协议)。具体使用 [Command] 还有 [ClientRpc] 两个特性。

  · [Command],客户端调用,但是只在服务器执行。注意函数名要加前缀‘Cmd’,如void CmdFire()

  · [ClientRpc],服务器调用,但是只在所有客户端执行。注意函数名要加前缀‘Rpc’,如void RpcRespawn()

3. 可以同步数据,并且通过同步数据调用相关处理函数。使用特性[SyncVar]来标记同步的变量。使用[SyncVar(hook = “OnChangeHealth”)]标记变量,在被标记的变量修改时,就会同时调用OnChangeHealth函数,该函数需要一个参数来接收这个变量。


为每个玩家添加跟踪相机(Camera)

  因为原教程只有一个总镜头而且是固定的,玩家很容易就出镜头了,所以想为每个玩家添加一个独立的相机,但是直接添加相机对象到Player上是不可行的。因为要知道使用Unity自带的Networking,工程是服务器和客户端一起使用的。那么相应的相机也会一起使用,这样的话,每添加一个玩家,就会多一个镜头,而工程是共用的,所有的服务器客户端的玩家,镜头显示的内容都会变成最新添加的镜头显示的内容。
  为了解决上面这个问题,可以一开始先把相机取消激活(SetActive(false)),在玩家进入场景时,只激活自己的镜头即可

1. 添加Camera 到Player Perfabs里面。并取消激活。

2. 修改代码,为PlayerController添加公有变量GameObject来获取相机,在OnStartLocalPlayer方法,激活自己的相机。

    //
    //PlayerController Class
    //

    public GameObject playerCamera;

    public override void OnStartLocalPlayer()
    {
        GetComponent().material.color = Color.blue;

        playerCamera.SetActive(true);       //激活自己的相机
    }

3. 添加相机到脚本。

4.测试,在两个终端每个玩家都有独立的相机画面。

完整工程见Github:NetworkProject。

你可能感兴趣的:(Unity,网络通信)