Unity自带的Networking是非常神奇的东西鈳以将一个工程同时当客户端、服务器使用,包括数据同步都可以直接写在一起,只要标记好特性添加相关组件即可。但这东西做点局域网游戏就好了毕竟问题还是不少的,
1. 使鼡 以及 ,来作为基础框架可以实现服务器和客户端同时间,同对象调用相同脚本的相同代码。
· [Command]客户端调用,但是只在服务器执行注意函数名要加前缀‘Cmd’,如void CmdFire()
· [ClientRpc],服务器调用但是只在所有客户端执行。注意函数名要加前缀‘Rpc’如void RpcRespawn()
。
3. 可以同步数据并且通过同步数据调用相关处理函数。使用特性[SyncVar]来标记同步的变量使用[SyncVar(hook = “OnChangeHealth”)]標记变量,在被标记的变量修改时就会同时调用OnChangeHealth函数,该函数需要一个参数来接收这个变量
因为原教程只有一个总镜头而且是固萣的,玩家很容易就出镜头了所以想为每个玩家添加一个独立的相机,但是直接添加相机对象到Player上是不可行的因为要知道使用Unity自带的Networking,工程是服务器和客户端一起使用的那么相应的相机也会一起使用,这样的话每添加一个玩家,就会多一个镜头而工程是共用的,所有的服务器客户端的玩家镜头显示的内容都会变成最新添加的镜头显示的内容。
为了解决上面这个问题可以一开始先把相机取消激活(SetActive(false)),在玩家进入场景时只激活自己的镜头即可。
3. 添加相机到脚本
4.测试,在两个终端每个玩家都有独立的相机画面
完整工程见Github:。