Unity3d学习记录之UNet网络模块

学习来源:

http://www.taikr.com/my/course/1018 

http://www.taikr.com/my/course/278    

https://docs.unity3d.com/Manual/UNetConverting.html


联机游戏可增加游戏的可玩性和竞技性,所以一款好的联机游戏将会带来很多乐趣。

Unity自带一个简单的网络模块UNet,可将单人游戏改成多人联机游戏。

将单人游戏转换为Unity多人游戏的步骤:

①:给游戏增加网络管理NetworkManager和NetworkManagerHUD

NetworkManager用于管理整个网络游戏,NetworkManagerHUD是为了简单测试联机游戏,而后的网络连接端UI可自行编写。

Show Runtime GUI  :

显示运行时GUI 勾选此复选框可在运行时显示网络管理器HUD GUI。这允许您显示或隐藏它以便快速调试。

②在玩家预制体身上添加NetworkIdentity组件(网络标志),用于是在服务端控制还是客户端(本地)控制。网络游戏物体必须携带!

添加NetworkTransform组件,同步其物理性质。在操作玩家时的脚本需将继承类改成NetworkBehavior,使用网络模块的类。为了区分玩家操控,需用IslocalPlayer来对代码进行判断,因为在网络游戏中所获得到的除自己以外的物体,全部都是通过服务端进行同步,所以当使用了IslocalPlayer判断是否为本地客户端的玩家操作,就可以进行本地操控,而不是同时操控全部玩家。

Server Only:

仅限服务器

勾选此复选框以确保Unity仅生成服务器上的GameObject,而不是客户端上的GameObject。

Local Player Authority:

本地球员管理局 勾选此复选框可将此GameObject的权威网络控制权提供给拥有它的客户端。该客户端上的玩家GameObject拥有对它的权限。其他组件(如Network Transform)使用此选项来确定将哪个客户端视为权限来源。

③处理非玩家物体

物体本身需要添加NetworkIdentity和NetworkTransform组件,且需要在NetworkManager下进行注册。

玩家预制体则在Player Prefab上注册,而剩余的生成物体则需要在Registered Spawnable Prefabs中注册。

修改spawner仅在服务器上运行(使用isServer属性或OnStartServer()函数)且用NetworkServer.Spawn()进行同步创建的物体。

is Server属性可将某函数仅在服务器中调用,OnStartServer()函数是在服务端开始时调用(Awake)。

④玩家的出生位置处理

需要添加NetworkStartPosition组件用于生成玩家位置。

⑤房间系统(进入游戏界面之前的场景)

创建空物体并在上面添加Network Lobby Manager组件

Lobby  Scene:用于显示房间的场景(游戏界面场景)

Play Scene:游戏场景

Lobby Player Prefab:进入房间场景中的玩家预制体(需要添加Network Lobby Player组件

Game Player Prefab :进入游戏的的玩家预制体


自此,一个简单的多人游戏网络框架大概就知道了。但如何从客户端与服务端进行交互,这才是网络游戏的重点也是难点。

可在脚本中添加[Commad]属性,将某函数(需以Cmd开头)变成从客户端调用,从服务端执行。

[ClientRpc]属性,将某函数(需以Rpc开头)变成从服务端调用,从客户端执行。

[SyncVar]属性,在当前帧结束前发送给客户端,同步各机理。

猜你喜欢

转载自blog.csdn.net/leanerU/article/details/82888166