unity3d-多人坦克对战

这次的作业是在上一次坦克大战作业的基础上进行改进,实现多人网络对战版。

视频演示

https://www.bilibili.com/video/av25649733/

游戏实现

游戏主要对象还是利用了坦克预设和子弹预设。如下图:

这里写图片描述

将原本的脚本都去掉,然后为tank预设添加Network Identity和Network Transform组件,并且把Network Identity的local player authority选项勾上,以允许能够在本地进行控制。然后创建一个Empty对象并挂载Network Manager和Network Manager HUD脚本,作为整个游戏的网络管理对象。同样的道理,子弹也应该添加Network Identity和Network Transform组件,注意子弹不需要勾选local player authority,并且Network Send Rate设为0即可。最后还要在Network Manager的Spawn Info里面注册相应的预设。具体设置如下:

这里写图片描述
这里写图片描述
这里写图片描述

主要代码

为坦克添加控制脚本PlayerMove。Update()函数首先判断是不是本地对象执行,只有是服务端对象执行才可以修改坦克的位置,通过监听按键输入来控制刚体组件相应的速度来实现。当按下空格的时候,坦克开火。我使用了AddForce来控制子弹实例的刚体运动。如果直接在本地执行函数CmdShoot中使用,会出现client端子弹产生后不会运动的效果。(原因可以查一下谷歌:unity3d network transform addforce not working)。这里需要将AddForce函数放在一个ClientRpc函数中调用,这样才可以在所有客户端中同步。

其他的代码比较简单,这里就不累述。注意下两个函数:OnStartClient()和OnStartServer()。这两个函数分别在客户端对象和服务端对象产生时调用,这里我使用它们的目的是将对象的transform传递给main camera,使得main camera可以根据坦克对象的位置自动更新视野。

pub
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值