Unity3D学习——使用PUN写一个聊天功能
PUN,即Photon Unity Networking,它是一个Unity多人游戏插件包。它提供了身份验证选项、匹配,以及快速、可靠的通过我们的Photon后端实现的游戏内通信。
在实现聊天功能之前,你需要把PUN导入到你的项目中来,并完成玩家加入房间等功能。
现在,我已经写好了一个房间,并让两个玩家加入了房间内
并且写好了聊天框,聊天框要挂载photonview组件
下面是关键代码
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.Collections;[RequireComponent(typeof(PhotonView))]
public class InRoomChat : Photon.MonoBehaviour
{//声明变量public Rect GuiRect;public bool IsVisible = true;public bool AlignBottom = false;public List<string> messages = new List<string>();private string inputLine = "";public Vector2 scrollPos;public InputField inputMessage;public GameObject btnSend;public GameObject lblRoomMessage;public static readonly string ChatRPC = "Chat";public void Start(){FindObject();}//加载需要的对象public void FindObject(){inputMessage = GameObject.Find("inputRoomMessage").GetComponent<InputField>();btnSend = GameObject.Find("btnRoomMessage");lblRoomMessage = GameObject.Find("lblRoomMessage");if (btnSend != null){btnSend.GetComponent<Button>().onClick.AddListener(delegate { SendContent(); });}}//发送聊天内容public void SendContent(){if (!this.IsVisible || !PhotonNetwork.inRoom){return;}//获取聊天框内容inputLine = inputMessage.text;if (!string.IsNullOrEmpty(this.inputLine)){lblRoomMessage.GetComponent<Text>().text = "";//关键代码 使用photonView.RPC发送消息this.photonView.RPC("Chat", PhotonTargets.All, this.inputLine);this.inputLine = "";inputMessage.text = "";inputMessage.ActivateInputField();}else{return;}}//接收方收取消息[PunRPC]public void Chat(string newLine, PhotonMessageInfo mi){string senderName = "anonymous";lblRoomMessage.GetComponent<Text>().text = "";if (mi.sender != null){if (!string.IsNullOrEmpty(mi.sender.NickName)){senderName = mi.sender.NickName;}else{senderName = "player " + mi.sender.ID;}}this.messages.Add("<color=#EEAD0E>" + senderName +":</color> " + newLine);//只显示最新的24条消息List<string> newmessages = new List<string>();if (messages.Count > 24){for (int i = (messages.Count - 24); i < messages.Count; i++){newmessages.Add(messages[i]);}for (int i = 0; i < newmessages.Count; i++){lblRoomMessage.GetComponent<Text>().text += newmessages[i] + "\n";}}else{for (int i = 0; i < messages.Count; i++){lblRoomMessage.GetComponent<Text>().text += messages[i] + "\n";}}}public void AddLine(string newLine){this.messages.Add(newLine);}
}
关键的代码就是这一句, photonView组件自带的功能,第一个参数是接收方法,第三个参数是聊天内容
this.photonView.RPC("Chat", PhotonTargets.All, this.inputLine);
接收方的方法,前面要带上[PunRPC]
[PunRPC]
public void Chat(string newLine, PhotonMessageInfo mi)
{
//接收后的处理
}
就是这些了,省略了一些其他部分的内容。希望这篇文档能有帮助。
Unity3D学习——使用PUN写一个聊天功能相关推荐
- python socket能做什么_用python写一个聊天小程序!和女朋友的专属聊天工具!
原标题:用python写一个聊天小程序!和女朋友的专属聊天工具! 1.UDP简介 Internet协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP).UDP为应用程序提供了无需建立就可 ...
- 【GitHub探索】v语言上手,用vlang写一个聊天应用
前言 vlang(v语言)自从6月份突然炒热起来,不知不觉到了11月,正式版就要出来了,在11月的GitHub Trending榜中依然排在前10.这着实令人好奇,因此笔者决定试用一下vlang,写一 ...
- c语言编写对答机器人_来,你也可以用 C 语言写一个聊天机器人
来,你也可以用 C 语言写一个聊天机器人 你是不是一直在面对着枯燥的 C 语言特性.摸索着前人写过的各种算法,不是因为自己的兴趣,而是依靠自身的毅力,学得很苦吧. 好吧,我们找一个好玩一点的东西,一起 ...
- 利用itchat写一个聊天机器人
利用itchat写一个聊天机器人 聊天机器人 图灵机器人 需要的库 **自动回复私聊消息** **自动回复群聊消息** 结语: 聊天机器人 偶然在CSDN上看到大佬用20行教你写一个聊天机器人,觉得甚 ...
- vue中手写一个放大镜功能
vue中手写一个放大镜功能 有的时候需要对图片进行放大,类似于电商的商品放大功能,于是在这个想法上写了一个放大镜的功能,并且在放大镜的基础上新添加了一些小功能,下面开始吧! 放大镜是封装的组件的形式, ...
- php 利用redis写一个聊天室,使用Redis完成聊天室功能
Redis提供了Pub/Sub(发布/订阅)模式的消息机制.发布者向指定频道发布消息,订阅了该频道的订阅者就可以获取消息.通过该机制,我们可以完成聊天室.公告牌等功能. 首先,来介绍下关于pub/su ...
- 如何用Java写一个聊天机器人
文章目录 建议结合新版教程看 写在前面的的话 免责声明 你需要提前会的东西 我们要使用的框架 首先我们先下载一个Demo 文件配置 Demo里面的的目录结构 在配置文件中加上你小号的QQ名字和密码 我 ...
- 用python写一个聊天小程序!和女朋友的专属聊天工具!
1.UDP简介 Internet协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP).UDP为应用程序提供了无需建立就可以发送封装的IP数据包的方法. PS:如有需要Python学习资料 ...
- python用程序说爱你_用python写一个聊天小程序!和女朋友的专属聊天工具!
1.UDP简介 Internet协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP).UDP为应用程序提供了无需建立就可以发送封装的IP数据包的方法. Internet的传输层有两个协议 ...
- Fdog系列(一):思来想去,不如写一个聊天软件,那就从仿QQ注册页面开始吧。
文章目录 一.前言 1. 基础布局 2. 自动切换图片 3. 添加内容 4. 自动缩放,控件的显示和隐藏 5.响应用户输入操作 所有文章源码已整体打包上传至github,求星星! 一.前言 两年的大学 ...
最新文章
- Cocos2d之Texture2D类详解之将文件加载成Texture2D对象
- 毕业2年从月薪400到6000 继续网络梦
- 页面置换算法简单对比----《operating system concepts》《操作系统原理》
- 3.7 PPP协议和HDLC协议
- LiveVideoStack Meet回归北京站:未来会更卷吧?
- springcloud——eureka小错误Caused by: java.net.UnknownHostException: eureka7003.com
- 操作系统之进程管理:9、进程互斥的硬件实现方法
- atitit.《金刚经》与it软件项目管理的启发 读后感attilax
- php preg_replace()漏洞记录
- Adaboost算法的理解
- 北交中外合作计算机类出国留学,北交大中外合作办学怎么样
- 《带你学C带你飞》—— SE54位操作
- jar包反编译工具(java-decompiler)
- 机器学习中的名词解释(一):监督学习、无监督学习、半监督学习、自监督学习(通俗理解)
- 服务器型号 数量和配置,一配置总体情况设备名称设备配置数量服务器HPDL580G7高性能.doc...
- 鱼C零基础学习python,课后习题答案
- Maven私服Nexus的搭建
- android模糊检索_Android中实现输入框实时模糊搜索效果的方法
- 计算机应用技术重点学科,计算机应用技术省级重点学科
- excel 中vb组合框_Excel组合框上的标题
热门文章
- collections.Counter 用法
- 一文了解 Serverless 究竟是什么
- 最小采样频率计算公式_速度采样频率
- ZXing设置前置摄像头扫描
- Caused by: org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next token found char
- 深度学习:行为识别综述
- 姿态估计与行为识别(行为检测、行为分类)的区别
- 微信IPAD协议安卓协议DEMO,登录篇#1
- 注销不想用的Apple ID
- matlab 自制闹钟程序,原生JS写的一个简单闹钟程序