Unity3d网络总结(二)使用NetWorking代码搭建简单的网络模块

上一篇文章(http://www.cnblogs.com/dabaimifan/p/7212615.html)介绍了通过给物体添加NetWorking相关组件实现简单的搭建一个网络,本文通过C#代码搭建一个简单的网路,详细解释会在代码里注释,供新手学习使用

首先,引入UnityEngine下的NetWorking命名空间,并初始化相关对象,提前创建好预设体并放入Resources文件夹下,这里需要注意的是在Start里调用方法让程序保持在后台运行,不然客户端会连接不上服务器(后台),

public class NetManager : MonoBehaviour {
    //创建客户端
    NetworkClient MyClient;
    //创建预设体   网络对象
    GameObject playerPre;
    void Start ()
    {    
        //保持程序后台运行
        Application.runInBackground = true;
playerPre
= Resources.Load("Player") as GameObject; //初始化客户端 MyClient = new NetworkClient(); }

然后写 创建服务器的方法

 //创建服务器的方法
    public void InitServerAction()
    {
        if (!NetworkServer.active)
        {
            //创键并开启服务器,服务器开始监听
            // 默认ip地址 为127.0.0.1
            NetworkServer.Listen("127.0.0.1", 1345);
            Debug.Log("服务器已经开启");
            //给服务器注册回调方法(ServerAddPlayerCallback)
            NetworkServer.RegisterHandler(MsgType.AddPlayer, ServerAddPlayerCallback);
            //将服务器也初始化 为一个客户端    
            MyClient = ClientScene.ConnectLocalServer();
            //注册客户端连接之后的回调方法(ClientConnectServerCallback)
            MyClient.RegisterHandler(MsgType.Connect, ClientConnectServerCallback);
        }
    }

写服务器添加玩家后的回调方法(ServerAddPlayerCallback) 与客户端连接之后的回调方法(ClientConnectServerCallback):

//服务器接收客户端发送的添加游戏玩家之后执行的回调方法
    void ServerAddPlayerCallback(NetworkMessage msg)    
    {
        //创建一个游戏对象
        GameObject player= Instantiate(playerPre,new Vector3(0,0,0),Quaternion.identity);
        //将创建的网络对象的权限赋值给客户端
        NetworkServer.AddPlayerForConnection(msg.conn, player,31);
        //将该玩家的对象卵生到所有连接服务器的客户端
        NetworkServer.Spawn(player);
    }
//客户端连接之后的回调方法
    void ClientConnectServerCallback(NetworkMessage msg)      
    {
        //告诉服务器准备完毕
        ClientScene.Ready(msg.conn);
        //向服务器注册预设体(预设体必须是网络对象)
        ClientScene.RegisterPrefab(playerPre);
        //向服务器发送添加游戏对象的请求
        //服务器在接收这个请求之后会自动调用 添加游戏玩家的回调方法
        ClientScene.AddPlayer(31);
    }

再写一个客户端连接服务器的方法:

//客户端连接服务器的事件
    public void ClientConnectServerAction()
    {
        //连接服务器
        MyClient.Connect("127.0.0.0", 1345);
        //注册客户端连接之后的回调方法
        MyClient.RegisterHandler(MsgType.Connect, ClientConnectServerCallback);
    }

最后我们用GUI添加两个Button绑定事件

private void OnGUI()
    {
        if (GUI.Button(new Rect(10, 10,100, 30), "server"))
        {
            InitServerAction();
        }
        if (GUI.Button(new Rect(10, 50, 100, 30), "client"))
        {
            ClientConnectServerAction();
        }
    }

效果图

运行,点击Server创建服务器

打包程序并运行,点击Client连接服务器

 

简单的网络搭建完毕,这里用到的都是Unity自带的封装好的NetWorking,下一篇文章分享一下Socket的简单搭建

posted @ 2017-07-20 19:21  不伪  阅读(6563)  评论(1编辑  收藏  举报