NetworkManager组件
可Add Component添加Network Manager组件,
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181213144903745.png)
或可在脚本中派生一个类继承自NetworkManager。
public class MyUnet : NetworkManager
勾选Dont Destory On Load–场景切换过程中不销毁。
场景管理
offline Scene–当网络停止时(服务器或主机停止了),由客户端断开,离线场景将被加载。使得游戏断开时自动回到菜单场景。
online Scene–当服务器或主机启动时,加载该场景。任何连接到服务器的客户端也会加载这个场景。这个场景的名称存储在networkSceneName属性中。
动态更改场景
通过调用方法NetworkManager.ServerChangeScene()。
预制体
大多数游戏都有一个预设体作为主角对象,在NetworkManager中留有Player Prefab来放置玩家预设体
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181213154810540.png)
玩家对象将自动网络实例化物体在每个用户的游戏中,可以互相看到对方。要注意的是预设体必须添加Network Identity组件。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181213154032260.png)
除了玩家预设体以外,其他预设体例如子弹,技能等等。也可添加Network Manager组件中。添加到列表中的预设体会自动被注册。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181213154740250.png)
其他想要动态产生的预设体也必须在ClientScene中注册,可以使用ClientScene.RegisterPrefab()函数。
HUD界面
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181213162934353.png)
自定义用户界面按钮函数
//创建主机
public void CreateHost()
{
//创建端口号
NetworkManager.singleton.networkPort=7777;
//创建一个主机
NetworkManager.singleton.StartHost();
}
//创建客户端
public void CreatClient()
{
//创建端口号
NetworkManager.singleton.networkPort=7777;
//需要地址
//创建一个临时变量--获取文本框中的值
string temp_address=GameObject.Find("..").GetComponent<InputField>().text;
NetworkManager.singleton.networkAddress=temp_address;
NetworkManager.singleton.StartClient();
}
出生位置
控制玩家在哪里出生,可以使用NetworkStartPosition组件。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181213161737383.png)
用户自定义
服务器/主机上调用的方法有:
//当有客户端连接时调用
public virtual void OnServerConnect(NetworkConnection conn);
//当有客户端断开时调用
public virtual void OnServerDisconnect(NetworkConnection conn)
{
NetworkServer.DestroyPlayersForConnection(conn);
}
//当有客户端准备时调用
public virtual void OnServerReady(NetworkConnection conn)
{
NetworkServer.SetClientReady(conn);
}
//当生成对象到客户端时调用
public virtual void OnServerAddPlayer(NetworkConnection conn,short playerControllerId)
{
var player=(GameObject)GameObject.Instantiate(playerPrefab,playerSpawnPos,Quaternion.identity);
NetworkServer.AddPlayerForConnection(conn,player,playerControllerId);
}
//当玩家从客户端诋毁时调用
public virtual void OnServerRemovePlayer(NetworkConnection conn,short playerControllerId)
{
PlayerController player;
if(conn.GetPlayer(playerControllerId,out player))
{
if(player.NetworkIdentity !=null && player.NetworkIdentity.gameObject!=null)
{
NetworkServer.Destory(player.NetworkIdentity.gameObject);
}
}
}
//当服务器发生错误时调用
public virtual void OnServerError(NetworkConnection conn,int errorCode);
在客户端调用的方法:
//当连接到服务器时调用
public virtual void OnClientConnect(NetworkConnection conn)
{
ClientScene.Ready(conn);
ClientScene.AddPlayer(0);
}
//当断开服务器时调用
public virtual void OnClientDisconnect(NetworkConnection conn)
{
StopClient();
}
//当网络问题时调用
public virtual void OnClientError(NetworkConnection conn,int errorCode);
//告诉服务器没准备好时调用
public virtual void OnClientNotReady(NetworkConnection conn);
Matchmaker会调用的方法:
//当有一个比赛创建
public virtual void OnMatchCreate(CreateMatchResponse matchInfo);
//当接受到比赛列表时调用
public virtual void OnMatchList(ListMatchResponse matchList);
//当加入比赛时调用
public virtual void OnMatchJoined(JoinMatchResponse matchInfo);