首先创建一个空的游戏物体,挂上Network Manager 和 Network Manager HUD 两个组件
在角色上面个添加,Network Identity 组件,然后把这个角色做成预制体。
将预制体拖到Player Prefab 。
控制角色的脚本,需要继承NetworkBehaviour ,然后去判断是否时islocalplayer 不是本地就return,这样就能控制各自客户端的角色。
接着就是同步角色的位置了,需要在预制体player身上挂Network Transform组件,这个组件是用来同步角色的position rotation 等位置信息的。
//当本地角色创建的时候,会调用这个方法 这个方法只在本地调用 可以在这个方法更改本地角色的一些属性
public override void OnStartLocalPlayer()
{
base.OnStartLocalPlayer();
}
知识点:子弹同步到客户端的设置
子弹是需要在服务端生成,然后同步到各个客户端的。
[Command]//加上command特性后 只会在服务端运行
void fire()
{
//生成子弹 需要在server端完成,然后把子弹同步到各个client端
GameObject bulletobj = Instantiate(bullet, bulletpos.position, bulletpos.rotation);
bulletobj.GetComponent<Rigidbody>().velocity = bulletobj.transform.forward * 10;
NetworkServer.Spawn(bulletobj);//这句如果不加上去的话,那么无论是服务端还是客户端,子弹都只在服务端才能看到, 所以这句话是让子弹从服务端同步到各个客户端
}
接着还需要同步子弹的速率,因为子弹的速度是通过刚体进行移动的,那么需要给子弹添加Network Transform组件
network Send Rate这个是同步的速率 因为只需要同步一次给子弹一个速度就行,所以设置为0
Transform Sync Mode 这个是同步子弹的刚体组件。