zoukankan      html  css  js  c++  java
  • 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的简单搭建

  • 相关阅读:
    nyoj 409——郁闷的C小加(三)——————【中缀式化前缀后缀并求值】
    中缀表达式转后缀表达式和前缀表达式
    Zoj 3870——Team Formation——————【技巧,规律】
    BNU4286——Adjacent Bit Counts——————【dp】
    BNU7538——Clickomania——————【区间dp】
    BNU4299——God Save the i-th Queen——————【皇后攻击,找到对应关系压缩空间】
    HDU 2795——Billboard——————【单点更新、求最小位置】
    HDU 4027—— Can you answer these queries?——————【线段树区间开方,区间求和】
    BNU34067——Pair——————【找规律】
    telnet 命令使用方法详解
  • 原文地址:https://www.cnblogs.com/dabaimifan/p/7213936.html
Copyright © 2011-2022 走看看