U3D网络部分学习笔记

1.对于一个联机游戏而言,首要的就是创建一个Empty的Object,在其上添加NetworkManager和NetworkManager HUD组件。还有就是不要忘记在脚本的最开始加入using UnityEngine.Network。

前者可以控制Player的自动生成,后者则是进入联机游戏时的UI部分(可以选择以Server还是Client身份连入游戏,填写主机地址等)。

2.对于Player人物的同步,可以通过直接在Player上添加组件Network Transform(除了同步Transform信息还可以同步Rigidbod信息,如速度等)和Network Identity来实现。注意:在脚本中通过IsLocal来保证每个端只能控制该端的LocalPlayer。

3.各种游戏逻辑实际都是放在服务器端完成的。在生成子弹时(不管是哪个Player发出的),也是如此,然后同步到各个客户端。

首先,要让子弹在网络中生成,需要将Bullet放在NetworkManager的List里(要先确保Bullet里有NetworkIdentity组件)。

然后,因为是在服务器端控制子弹的生成,在其他客户端调用函数,所以要在脚本中Fire函数前加上[Command],并将Fire函数名改为CmdFire。此时,在运行游戏,打开一个服务器端一个客户端。在客户端中控制LocalPlayer发射子弹,发现客户端中没有反应,而在服务器端却是正常的,这就需要我们对子弹进行同步。在CmdFire里加入语句,NetworkServer.Spawn(bullet);。之后再次启动游戏,在客户端中发射子弹,发现客户端种可以产生子弹了,但是子弹却没有速度。此时,再在Bullet中添加NetworkTransform即可。大功告成!



猜你喜欢

转载自blog.csdn.net/uiucgogogo/article/details/79149979