Unity官方内置网络NetWork官方实例教程(一)
Unity官方内置网络NetWork官方实例教程(二)
本篇是接上篇unet的基础篇的一些功能的拓展主要为以下:
- 代码自定义生成玩家。
- 数据的同步问题。
0x00 简介
- OnServerReady:当有客户端准备(Ready)时调用
- OnServerAddPlayer:当生成对象到客户端时调用
- OnServerRemovePlayer:当玩家从客户端销毁时调用
- OnServerDisconnect:当有客户端断开时调用
- OnServerConnect:当有客户端连接时调用
- OnServerError:当服务器发生错误时调用
- OnClientConnect:当连接到服务器时调用
- OnClientDisconnect:当断开服务器时调用
- OnClientError:当网络问题时调用
- OnClientNotReady:告诉服务器没准备好时调用
- OnMatchCreate:当有一个比赛创建
- OnMatchList:当接收到比赛列表时调用
- OnMatchJoined:当假如比赛时调用
0X01 自定义生成玩家(位置)
自定义生成玩家即自定义位置,颜色,标签等不同的玩家。如果我们想做一些对战的小游戏可以参考。
- 在Hierarchy中创建一个空物体用来放玩家出生点,自定义命名(例子为:SpawnPoints)。
- 在SpawnPoints中添加相应的点(自定义命名,自定义位置)并添加NetworkStartPosition组件。如图所示:
- 重写了NetworkManager脚本,代码如下:
public class MyNetWorkManager : NetworkManager
{
#region 字段
private short _tempIdCount = 1;
//private int _tempCamDepthCount = 4;
private NetworkStartPosition[] _spawnPoints;
#endregion
#region 系统方法
// Use this for initialization
void Start()
{
_spawnPoints = FindObjectsOfType<NetworkStartPosition>();
#region 测试
//foreach (var item in _spawnPoints)
//{
// Debug.Log(item.name);
//}
#endregion
}
#endregion
#region NetWork方法
/// <summary>
/// 添加玩家
/// </summary>
/// <param name="conn">连接方式</param>
/// <param name="playerControllerId">玩家id</param>
public override void OnServerAddPlayer(NetworkConnection conn, short playerControllerId)
{
playerControllerId = _tempIdCount;
GameObject player = (GameObject)Instantiate(playerPrefab, Vector3.zero, Quaternion.identity);
player.name = "Player_" + playerControllerId;
if (_spawnPoints != null)
{
player.transform.position = _spawnPoints[playerControllerId - 1].transform.position;
player.transform.rotation = _spawnPoints[playerControllerId - 1].transform.rotation;
}
NetworkServer.AddPlayerForConnection(conn, player, playerControllerId);
_tempIdCount += 1;
// _tempCamDepthCount -= 1;
}
#