使用NetWork创建服务器端Sever
NetworkConnectionError error = Network.InitializeServer(connections, listenPort, useNat);
》connections:表示最大连接数
》listenPort:连接的端口
》useNat:是否使用Nat技术
》NetworkPeerType.Disconnected有四中状态,分为客户端和服务器端
服务端:
NetworkPeerType.Disconnected: //服务端未初始化时
NetworkPeerType.Server: //初始化成功、开始监听后
客户端:
NetworkPeerType.Disconnected: //客户端未初始化
NetworkPeerType.Connecting: //客服端正在请求和服务端建立连接
NetworkPeerType.Client: //客户端跟服务端建立连接
using UnityEngine;
using UnityEngine.UI;
public class MyNetWord : MonoBehaviour {
public int connections = 10;
public int listenPort = 8899;
public bool useNat = false;
public Button createServerBtn;
public Button linkServerBtn;
public Text testTip;
void Start()
{
createServerBtn.onClick.AddListener(OnCreatServerClick);
}
private void OnCreatServerClick()
{
NetworkConnectionError error = Network.InitializeServer(connections, listenPort, useNat);
Debug.Log(error); //如果创建失败会得到错误信息,如果创建成功返回“NoError”
if(Network.peerType == NetworkPeerType.Server)
{
testTip.gameObject.SetActive(true);
createServerBtn.gameObject.SetActive(false);
linkServerBtn.gameObject.SetActive(false);
}
}
}
创建Client端连接服务器端
Network.Connect(ip, listenPort);
ip:要连接的服务器端的ip的地址
listenPort:要连接的服务器的端口号
返回结果:返回错误信息,没有错误就返回NoError
using UnityEngine;
using UnityEngine.UI;
enum PeerType
{
Server,
Client,
Disconnected,
None
}
public class MyNetWord : MonoBehaviour {
public int connections = 10;
public int listenPort = 8899;
public bool useNat = false;
public Button createServerBtn;
public Button linkServerBtn;
public Text testTip;
public string ip = "127.0.0.1";
void Start()
{
createServerBtn.onClick.AddListener(OnCreatServerClick);
linkServerBtn.onClick.AddListener(OnLinkServerClick);
}
private void OnGUI()
{
if (Network.peerType == NetworkPeerType.Client)
{
Debug.Log("++++++++++++++");
ChangTipText("客户端接入");
}
}
private void OnCreatServerClick()
{
NetworkConnectionError error = Network.InitializeServer(connections, listenPort, useNat);
Debug.Log(error); //如果创建失败会得到错误信息,如果创建成功返回“NoError”
if(Network.peerType == NetworkPeerType.Server)
{
ChangTipText("服务器创建完成");
}
}
private void OnLinkServerClick()
{
NetworkConnectionError error = Network.Connect(ip, listenPort);
Debug.Log(error);
}
private void ChangTipText(string text)
{
testTip.text = text;
testTip.gameObject.SetActive(true);
createServerBtn.gameObject.SetActive(false);
linkServerBtn.gameObject.SetActive(false);
}
}
MonoBehavior中提供监听服务器端和客户端的事件函数
》在服务器端掉用:
1.void OnServerInitialized(){} //服务器初始化时调用
2.OnPlayerConnected(NetworkPlayer player){} //当有客户端连接到服务器端是调用,在服务器端调用
》在客户端调用:
1.void OnConnectedToServer(){} //当客户端连接到服务器端时调用,在客户端调用
private void OnServerInitialized() //服务器初始化时调用,在服务器端掉用
{
ChangTipText(testTip.text+",Server 完成初始化");
}
private void OnPlayerConnected(NetworkPlayer player) //当有客户端连接到服务器端是调用,在服务器端调用
{
ChangTipText(testTip.text + "一个客户端连接过来,客户端Index=" + player);
}
private void OnConnectedToServer() //当客户端连接到服务器端时调用,在客户端调用
{
ChangTipText(testTip.text + "本客户端已经连接到了服务器端");
}
在局域网内创建共享物体
Network.Instantiate(cubePrefab, new Vector3(0, 10, 0), Quaternion.identity, group);
当服务器初始化时,在服务器端实例化一个cube物体,可以在客户端共享;在客户端创建,客户端也可以共享。
private void OnServerInitialized() //服务器初始化时调用,在服务器端掉用
{
ChangTipText(testTip.text+",Server 完成初始化");
int group = int.Parse(Network.player.ToString());
Network.Instantiate(cubePrefab, new Vector3(0, 10, 0), Quaternion.identity, group);
}
使用NetworkView组件做数据的同步
给局域网内共享的物体加上NetworkView组件课一同步共享物体的数据(如Transform信息)
注意:NetworkView组件会把创建出来共享物体的客户端当做主客户端,只有主客户端可以修改共享物体的数据并共享到其他客户端,其他客户端对该共享该共享物体的数据(数据以主客户端数据为主),没有权限修改该共享物体的数据(可以修改,但是不会共享到局域网内)
后续边学习边更新…
(敬请期待)