您的位置:首页 > 理论基础 > 计算机网络

Unity网络基础--封装一个网络管理类

2017-07-27 19:23 183 查看

将服务器和客户端封装为一个网络管理类

一、可以创建服务器,关闭服务器

二、乐意连接和断开服务器

三、客户端连接后实例化一个对象

四、客户端能够控制玩家移动并同步至服务器

Server端UI搭建(Text:提示框)



Server端具体代码如下

pubulic class ServerScripts:MonoBehaviour{
public Text warnningText;//提示框
public GameObject cubePrefab;//预设体

void Awake()
{
Application.runInBackground = true;
}

public void StarServerAction()
{
//1.判断当前网络状态
if(Network.peerType == NetworkPeerType.Server){
warnningText.text += "服务器已经开启\n";
return;
}
//开启服务器
//(最大连接数,端口号,是否Nat)
Network.InitializeServer(15,23456,false);
}
//服务器创建成功后的回调
void OnServerInitialized()
{
warnningText.text += "服务器创建成功\n";
}
//有新玩家加入后的回调
void OnPlayerConnected()
{
warnningText.text += "有新玩家连人\n";
}

//玩家与服务器断开连接后调用--触发在客户端
//player代表掉线的玩家
/*
* NetworkPlayer
* ipAddress :内网IP
* port: 内网端口
* GUID:当前游戏中游戏玩家的唯一ID
* externIP:外网IP
* externPort:外网端口
* */
void OnPlayerDisconnected(NetworkPlayer player)
{
warnningText.text += player.ipAddress+":玩家与服务器连接断开\n";
}
//在服务器端创建对象
public void CreateObjectAction()
{
Network.Instantiate (cubePrefab, Vector3.zero, Quaternion.identity, 0);
}
}


服务器端代码工作做完后,在Unity中关联对应按钮触发的事件并添加好控件和预设体.

Client端UI搭建



Client端的实现

public class ClientScripts : MonoBehaviour {
public InputField ipInput;//IP输入
public InputField portInput;//端口输入
public Text warnningText;//提示Text
public GameObject cubePrefab;//预设体

void Awake()
{
Application.runInBackground = true;
}

//连接服务器
public void ConnectToServerAction()
{
//判断当前网络状态
if (Network.peerType == NetworkPeerType.Client) {
warnningText.text += "已经连接了服务器\n";
return;
}

//判断IP地址和端口是否为空
if (ipInput.text.Length > 0 && portInput.text.Length > 0) {
//连接指定IP地址和端口号的服务器
Network.Connect (ipInput.text, int.Parse (portInput.text));
} else {
warnningText.text += "IP地址和端口号不能为空\n";
}
}

//客户端连接服务器成功后的回调
void OnConnectedToServer()
{
warnningText.text += "成功连接服务器\n";
}

//客户端连接服务器失败后的回调
void OnFailedToConnect()
{
warnningText.text += "连接服务器失败\n";
}

public void BreakConnectAction()
{
//断开与服务器的连接
Network.Disconnect();
}

void OnDisconnectedFromServer()
{
warnningText.text += "与服务器连接断开\n";
}
public void CreateObjectAction()
{
/*
*NetworkView : 网络预设体必须添加的组件
*用于同步预设体的信息:transfrom。刚体,脚本,Animator
*每一个组件只能同步以上中的一个
*每个网络预设体可以添加多个NetworkView组件
* */
//创建网络对象
//(网络对象的预设体)
Network.Instantiate(cubePrefab,Vector3.zero,Quaternion.identity,0);
}
}


最后还需要给cubePrefab预设体添加移动的脚本,通过判读预设体拥有者(NetworkView.owner)是否和当前Network.player相同使得对象只能被它的所属者控制

测试结果:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity 网络 服务器