[Unity3d] Network 聊天

 在上一个例子基础上,我们构建一个聊天室程序。

1,首先建立一个新项目,文件夹名为chat。

2,给接收请求的脚本所绑定的对象,添加网络视图组件(听起来有点绕口)。我们的服务器脚本是绑定在主摄像机上的,所以点击主摄像机,在菜单上选择component-->miscellaneous-->Net work View。

3,服务器端程序:(C# 脚本)

[csharp] view
plain
copy

  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class server : MonoBehaviour {  
  5.       
  6.     int Port = 10100;  
  7.     string Message = "";  
  8.     //声明一个二维向量   
  9.     Vector2 Sc;   
  10.       
  11.     //OnGUI方法,所有GUI的绘制都需要在这个方法中实现  
  12.     void OnGUI(){  
  13.         //Network.peerType是端类型的状态:  
  14.         //即disconnected, connecting, server 或 client四种  
  15.         switch(Network.peerType){  
  16.             //禁止客户端连接运行, 服务器未初始化  
  17.             case NetworkPeerType.Disconnected:  
  18.                 StartServer();  
  19.                 break;  
  20.             //运行于服务器端  
  21.             case NetworkPeerType.Server:  
  22.                 OnServer();  
  23.                 break;  
  24.             //运行于客户端  
  25.             case NetworkPeerType.Client:  
  26.                 break;  
  27.             //正在尝试连接到服务器  
  28.             case NetworkPeerType.Connecting:  
  29.                 break;  
  30.         }  
  31.     }  
  32.       
  33.     void StartServer(){  
  34.         //当用户点击按钮的时候为true  
  35.         if (GUILayout.Button("创建服务器")) {  
  36.             //初始化本机服务器端口,第一个参数就是本机接收多少连接  
  37.             NetworkConnectionError error = Network.InitializeServer(12,Port,false);  
  38.             //连接状态  
  39.             switch(error){  
  40.                 case NetworkConnectionError.NoError:  
  41.                     break;  
  42.                 default:  
  43.                     Debug.Log("服务端错误"+error);  
  44.                     break;  
  45.             }  
  46.         }  
  47.     }  
  48.       
  49.     void OnServer(){  
  50.         GUILayout.Label("服务端已经运行,等待客户端连接");  
  51.         //Network.connections是所有连接的玩家, 数组[]  
  52.         //取客户端连接数.   
  53.         int length = Network.connections.Length;  
  54.         //按数组下标输出每个客户端的IP,Port  
  55.         for (int i=0; i<length; i++)  
  56.         {  
  57.             GUILayout.Label("客户端"+i);  
  58.             GUILayout.Label("客户端ip"+Network.connections[i].ipAddress);  
  59.             GUILayout.Label("客户端端口"+Network.connections[i].port);  
  60.             GUILayout.Label("-------------------------------");  
  61.         }  
  62.         //当用户点击按钮的时候为true  
  63.         if (GUILayout.Button("断开服务器")){  
  64.             Network.Disconnect();  
  65.         }  
  66.         //创建开始滚动视图  
  67.         Sc = GUILayout.BeginScrollView(Sc,GUILayout.Width(280),GUILayout.Height(400));  
  68.         //绘制纹理, 显示内容  
  69.         GUILayout.Box(Message);  
  70.         //结束滚动视图, 注意, 与开始滚动视图成对出现  
  71.         GUILayout.EndScrollView();    
  72.     }  
  73.       
  74.     //接收请求的方法. 注意要在上面添加[RPC]  
  75.     [RPC]  
  76.     void ReciveMessage(string msg, NetworkMessageInfo info){  
  77.         //刚从网络接收的数据的相关信息,会被保存到NetworkMessageInfo这个结构中  
  78.         Message = "发送端"+info.sender  +"消息"+msg;  
  79.         //+"时间"+info.timestamp +"网络视图"+info.networkView  
  80.     }  
  81.       
  82.       
  83.     // Use this for initialization  
  84.     void Start () {  
  85.       
  86.     }  
  87.       
  88.     // Update is called once per frame  
  89.     void Update () {  
  90.       
  91.     }  
  92. }  

4,把脚本拖拽到主摄像机上,绑定。

5,运行程序 File---->Build settings---->Build And Run,选择Web Player

6,服务器端建立完毕,保持服务器端的运行状态。

7,简单起见,我们这里不新建项目。先把摄像机上的服务器脚本删掉,再把下面的客户端脚本拖拽上去。

客户端代码:

[csharp] view
plain
copy

  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class client : MonoBehaviour {  
  5.     //要连接的服务器地址  
  6.     string IP = "127.0.0.1";  
  7.     //要连接的端口  
  8.     int Port = 10100;  
  9.     //聊天信息  
  10.     string Message = "";  
  11.     //声明一个二维向量   
  12.     Vector2 Sc;   
  13.           
  14.     void OnGUI(){  
  15.         //端类型的状态  
  16.         switch(Network.peerType){  
  17.             //禁止客户端连接运行, 服务器未初始化  
  18.             case NetworkPeerType.Disconnected:  
  19.                 StartConnect();  
  20.                 break;  
  21.             //运行于服务器端  
  22.             case NetworkPeerType.Server:  
  23.                 break;  
  24.             //运行于客户端  
  25.             case NetworkPeerType.Client:  
  26.                 OnClient();  
  27.                 break;  
  28.             //正在尝试连接到服务器  
  29.             case NetworkPeerType.Connecting:  
  30.                 break;  
  31.         }  
  32.     }  
  33.           
  34.     void StartConnect(){  
  35.         if (GUILayout.Button("连接服务器")){  
  36.             NetworkConnectionError error = Network.Connect(IP,Port);  
  37.             //连接状态  
  38.             switch(error){  
  39.                 case NetworkConnectionError.NoError:  
  40.                     break;  
  41.                 default:  
  42.                     Debug.Log("客户端错误"+error);  
  43.                     break;  
  44.             }  
  45.         }  
  46.     }  
  47.       
  48.     void OnClient(){  
  49.         //创建开始滚动视图  
  50.         Sc = GUILayout.BeginScrollView(Sc,GUILayout.Width(280),GUILayout.Height(400));  
  51.         //绘制纹理, 显示内容  
  52.         GUILayout.Box(Message);  
  53.         //文本框  
  54.         Message = GUILayout.TextArea(Message);  
  55.         if (GUILayout.Button("发送")){  
  56.             //发送给接收的函数, 模式为全部, 参数为信息  
  57.             networkView.RPC("ReciveMessage", RPCMode.All, Message);  
  58.         }  
  59.         //结束滚动视图, 注意, 与开始滚动视图成对出现  
  60.         GUILayout.EndScrollView();  
  61.           
  62.     }  
  63.       
  64.     //接收请求的方法. 注意要在上面添加[RPC]  
  65.     [RPC]  
  66.     void ReciveMessage(string msg, NetworkMessageInfo info){  
  67.         //刚从网络接收的数据的相关信息,会被保存到NetworkMessageInfo这个结构中  
  68.         Message = "发送端"+info.sender  +"消息"+msg;  
  69.     }  
  70.           
  71.     // Use this for initialization  
  72.     void Start () {  
  73.       
  74.     }  
  75.       
  76.     // Update is called once per frame  
  77.     void Update () {  
  78.       
  79.     }  
  80. }  

服务端运行状态:

客户端运行状态:

时间: 2024-08-30 19:32:59

[Unity3d] Network 聊天的相关文章

unity3d-Unity3D与Android交互.

问题描述 Unity3D与Android交互. Unity3D network view建立局域网在PC端可以连接,但是在安卓机器上无法使用局域网连接 有没有大神知道解决方法? 解决方案 近来 在做AR 初次接触到 Unity3D ,C# 语言写的,也不是很懂 经过近2天的摸索,终于搞通了两者的交互,特整理此文,以备注 直接上代码 ? ? c# ?void?OnClick(){ ????????AndroidJavaClass&nbs......答案就在这里:Unity3D 与 Android

Unity3D实现基于Socket通讯的公共聊天室

多个客户端一同使用就是一个简单的公共聊天室.服务端为一个控制台程序使用C#实现,当然,在Unity3D中也相应地使用了C#语言实现客户端,服务端和客户端能实现消息的互通,当服务端接收到某客户端发送过来的消息时将会对客户端列表成员进行广播,这是公共聊天室的最基本的形式.Socket通讯是网络游戏最为基础的知识,因此这个实例能向有志投身于网游行业的初学者提供指导意义. using System; using System.Collections.Generic; using System.Linq;

注册了Google Affiliate Network

Google Affiliate Network的前身即是DoubleClick Performics,是Google在收购了DoubleClick Performics之后推出的CPA广告联盟业务.Google Affiliate Network的商户质量是目前各联盟平台中是较高的. Google的AdSense推介也属于CPA类型,但可能由于大量点击欺诈,Google早先关闭了AdSense推介业务,而Google Affiliate Network的业务目前只面向英文用户. 以前我也曾经尝

保护你的聊天隐私:外挂式加密软件设计思路

即时通讯工具(常用的是聊天软件与网上电话软件)被现代人越来越多地使用,主要是因为它便捷,随着手机3G技术的推广,即时通的移动在线能力,让你连走路的间歇都"没有"了,MSN.QQ已经成了都市新新人类的生活标志.信息沟通的高速度,使得人们思考的时间越来越少,性格变得急噪,很多话经常脱口而出,很多信息在不经意之间被不该知道的人知道了,不想被人听到的被转播了,不想被人看见的被直播了-越来越多的人在寻找能够加密的聊天软件. 有人推荐聊天软件自身的加密通讯功能,这样做有些掩耳盗铃.当大量的聊天记录

苹果mac系统下可以安装的聊天工具

上网聊天是绝对不能缺的,那么在mac电脑上能安装哪些聊天软件呢?又该怎么使用,我们一起来看看吧! Mac平台Messenger使用指导 MSN Messenger已然在中国成为了除了QQ外最流行的即时通讯工具了,微软当然也不会放弃Windows以外平台的MSN Messenger用户,于是在Mac OS X 10系统出现后微软就专门为Mac平台开发了基本功能的MSN Messenger,一直更新到现在的最新版本. 功能及安装使用: 下载完成后挂载DMG文件,将Microsoft Messenge

学习笔记TF059:自然语言处理、智能聊天机器人

自然语言处理,语音处理.文本处理.语音识别(speech recognition),让计算机能够"听懂"人类语音,语音的文字信息"提取". 日本富国生命保险公司花170万美元安装人工智能系统,客户语言转换文本,分析词正面或负面.智能客服是人工能智能公司研究重点.循环神经网络(recurrent neural network,RNN)模型. 模型选择.每一个矩形是一个向量,箭头表示函数.最下面一行输入向量,最上面一行输出向量,中间一行RNN状态.一对一,没用RNN,如

深度:解密巨头们所关注的聊天机器人

雷锋网(公众号:雷锋网)按:本文作者张俊,文章将会详细解密1)聊天机器人所要解决的三个问题:2)以及它们所使用的模式. 引言: chatbot是最近一段时间非常火的一个词或者一个应用,不仅仅各大新闻媒体在热炒bot的概念,各大巨头也投入巨大的资源进行研发,arxiv上刷出bot相关的paper也更是家常便饭.炒作归炒作,PR归PR,不得不说一个尴尬的事实是市面上确实难以找到一个真正好用的bot.bot按照涉及的领域,分为开放域(open-domain)和面向具体任务(task-oriented)

《JavaScript高效图形编程(修订版)》——6.11 一个图形使用画布的WebSockets聊天应用

6.11 一个图形使用画布的WebSockets聊天应用 在下面的例子中我们将看到一个更实用的画布应用程序:一个伪3D聊天应用程序(如图6-15所示).这个例子将演示如何将画布和其他HTML5特性如WebSockets结合. 6.11.1 WebSockets优势 除画布外,另一个同样令人振奋(但可能比较不知名)的HTML5元素是WebSockets.虽然这本书是关于图形的,但还是值得讨论一下为什么WebSockets对现代Web应用程序意义重大,以及如何将它们与画布集成. 通常服务器和客户端浏

一款名为Line的聊天工具在短短的19个月内就火爆全球

来自Line的官方数据显示,3月9日,Line的用户突破1.2亿,大约4500万用户来自日本,1500万来自中国台湾和泰国.不深入研究的用户可能以为它是一款日本公司研发的应用,但实际上,它是由韩国NHN的日本子公司研发的.LINE的母公司是韩国NHN(Next Human Network)公司.这是韩国资本市场市值最大的互联网公司,拥有最大的搜索引擎和门户网站Naver和韩国最大的游戏公司Hangame.这家公司的掌舵者正是韩国的互联网奇才--李海珍.一个伟大成功者往往缘于其有一位伟大的对手.对