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写一个聊天功能相关推荐

  1. python socket能做什么_用python写一个聊天小程序!和女朋友的专属聊天工具!

    原标题:用python写一个聊天小程序!和女朋友的专属聊天工具! 1.UDP简介 Internet协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP).UDP为应用程序提供了无需建立就可 ...

  2. 【GitHub探索】v语言上手,用vlang写一个聊天应用

    前言 vlang(v语言)自从6月份突然炒热起来,不知不觉到了11月,正式版就要出来了,在11月的GitHub Trending榜中依然排在前10.这着实令人好奇,因此笔者决定试用一下vlang,写一 ...

  3. c语言编写对答机器人_来,你也可以用 C 语言写一个聊天机器人

    来,你也可以用 C 语言写一个聊天机器人 你是不是一直在面对着枯燥的 C 语言特性.摸索着前人写过的各种算法,不是因为自己的兴趣,而是依靠自身的毅力,学得很苦吧. 好吧,我们找一个好玩一点的东西,一起 ...

  4. 利用itchat写一个聊天机器人

    利用itchat写一个聊天机器人 聊天机器人 图灵机器人 需要的库 **自动回复私聊消息** **自动回复群聊消息** 结语: 聊天机器人 偶然在CSDN上看到大佬用20行教你写一个聊天机器人,觉得甚 ...

  5. vue中手写一个放大镜功能

    vue中手写一个放大镜功能 有的时候需要对图片进行放大,类似于电商的商品放大功能,于是在这个想法上写了一个放大镜的功能,并且在放大镜的基础上新添加了一些小功能,下面开始吧! 放大镜是封装的组件的形式, ...

  6. php 利用redis写一个聊天室,使用Redis完成聊天室功能

    Redis提供了Pub/Sub(发布/订阅)模式的消息机制.发布者向指定频道发布消息,订阅了该频道的订阅者就可以获取消息.通过该机制,我们可以完成聊天室.公告牌等功能. 首先,来介绍下关于pub/su ...

  7. 如何用Java写一个聊天机器人

    文章目录 建议结合新版教程看 写在前面的的话 免责声明 你需要提前会的东西 我们要使用的框架 首先我们先下载一个Demo 文件配置 Demo里面的的目录结构 在配置文件中加上你小号的QQ名字和密码 我 ...

  8. 用python写一个聊天小程序!和女朋友的专属聊天工具!

    1.UDP简介 Internet协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP).UDP为应用程序提供了无需建立就可以发送封装的IP数据包的方法. PS:如有需要Python学习资料 ...

  9. python用程序说爱你_用python写一个聊天小程序!和女朋友的专属聊天工具!

    1.UDP简介 Internet协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP).UDP为应用程序提供了无需建立就可以发送封装的IP数据包的方法. Internet的传输层有两个协议 ...

  10. Fdog系列(一):思来想去,不如写一个聊天软件,那就从仿QQ注册页面开始吧。

    文章目录 一.前言 1. 基础布局 2. 自动切换图片 3. 添加内容 4. 自动缩放,控件的显示和隐藏 5.响应用户输入操作 所有文章源码已整体打包上传至github,求星星! 一.前言 两年的大学 ...

最新文章

  1. Cocos2d之Texture2D类详解之将文件加载成Texture2D对象
  2. 毕业2年从月薪400到6000 继续网络梦
  3. 页面置换算法简单对比----《operating system concepts》《操作系统原理》
  4. 3.7 PPP协议和HDLC协议
  5. LiveVideoStack Meet回归北京站:未来会更卷吧?
  6. springcloud——eureka小错误Caused by: java.net.UnknownHostException: eureka7003.com
  7. 操作系统之进程管理:9、进程互斥的硬件实现方法
  8. atitit.《金刚经》与it软件项目管理的启发 读后感attilax
  9. php preg_replace()漏洞记录
  10. Adaboost算法的理解
  11. 北交中外合作计算机类出国留学,北交大中外合作办学怎么样
  12. 《带你学C带你飞》—— SE54位操作
  13. jar包反编译工具(java-decompiler)
  14. 机器学习中的名词解释(一):监督学习、无监督学习、半监督学习、自监督学习(通俗理解)
  15. 服务器型号 数量和配置,一配置总体情况设备名称设备配置数量服务器HPDL580G7高性能.doc...
  16. 鱼C零基础学习python,课后习题答案
  17. Maven私服Nexus的搭建
  18. android模糊检索_Android中实现输入框实时模糊搜索效果的方法
  19. 计算机应用技术重点学科,计算机应用技术省级重点学科
  20. excel 中vb组合框_Excel组合框上的标题

热门文章

  1. collections.Counter 用法
  2. 一文了解 Serverless 究竟是什么
  3. 最小采样频率计算公式_速度采样频率
  4. ZXing设置前置摄像头扫描
  5. Caused by: org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next token found char
  6. 深度学习:行为识别综述
  7. 姿态估计与行为识别(行为检测、行为分类)的区别
  8. 微信IPAD协议安卓协议DEMO,登录篇#1
  9. 注销不想用的Apple ID
  10. matlab 自制闹钟程序,原生JS写的一个简单闹钟程序