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<MeshRenderer>().material.color = Color.blue;

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

3. 添加相机到脚本。

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

完整工程见Github:NetworkProject

  • 14
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值