var skin : GUISkin;

var showChat = false;
private var inputField = "";
private var display = true;
private var entries = ArrayList();
private var scrollPosition : Vector2;
var userName : String ;
var chatobject : Transform;
private var window = Rect(50, 100, 200, 300);

class ChatEntry
{
    var sender = "";
    var text = "";    
    var mine = true;
}

function Update () {

var go = GameObject.Find("Network");
   userName = go.GetComponent("NetworkConnection").playerName;

}

function CloseChatWindow ()
{
    showChat = false;
    inputField = "";
    entries = new ArrayList();
}

function FocusControl ()
{
    // We can't select it immediately because the control might not have been drawn yet.
    // Thus it is not known to the system!
    yield;
    yield;
    yield;
    GUI.FocusControl("Chat input field");
}

function OnGUI ()
{
    GUI.skin = skin;
    
    //if (GUILayout.Button(showChat ? "Hide Chat" : "Display Chat"))
    if (GUI.Button(new Rect(Screen.width-100, Screen.height-30, 90, 20), showChat ? "Hide Chat" : "Display Chat"))
    {
        // Focus first element
        if (showChat)
        {    
            CloseChatWindow ();
        }
        else
        {
            showChat = true;
            FocusControl();
        }
    }
    
    if (showChat)
        window = GUI.Window (1, window, GlobalChatWindow, "Chat");
}

function GlobalChatWindow (id : int) {
    
    var closeButtonStyle = GUI.skin.GetStyle("close_button");
    if (GUI.Button(Rect (4, 4, closeButtonStyle.normal.background.width, closeButtonStyle.normal.background.height), "", "close_button"))
    {
        CloseChatWindow();
    }
    
    // Begin a scroll view. All rects are calculated automatically -
    // it will use up any available screen space and make sure contents flow correctly.
    // This is kept small with the last two parameters to force scrollbars to appear.
    scrollPosition = GUILayout.BeginScrollView (scrollPosition);

for (var entry : ChatEntry in entries)
    {
        GUILayout.BeginHorizontal();
        if (!entry.mine)
        {
            GUILayout.FlexibleSpace ();
            GUILayout.Label (entry.text, "chat_rightaligned");
        }
        else
        {
            GUILayout.Label (entry.text, "chat_leftaligned");
            GUILayout.FlexibleSpace ();
        }
        
        GUILayout.EndHorizontal();
        GUILayout.Space(3);
        
    }
    // End the scrollview we began above.
    GUILayout.EndScrollView ();
    
    if (Event.current.type == EventType.keyDown && Event.current.character == "\n" && inputField.Length > 0)
    {
        //@TODO: This should be dependent on who actually sent the message
        //var mine = entries.Count % 2 == 0;
        ApplyGlobalChatText(userName+": "+""+inputField , 1);
        networkView.RPC("ApplyGlobalChatText", RPCMode.Others, userName+": " + inputField , 0);
        inputField = "";
    }
    GUI.SetNextControlName("Chat input field");
    inputField = GUILayout.TextField(inputField);
    
    GUI.DragWindow();
}

@RPC
function ApplyGlobalChatText (str : String, mine : int)
{
    var entry = new ChatEntry();
    entry.sender = "Not implemented";
    entry.text = str;
    if (mine == 1) entry.mine = true;
    else entry.mine = false;

entries.Add(entry);
    
    if (entries.Count > 50)
        entries.RemoveAt(0);
        
    scrollPosition.y = 1000000;    
}

实现类似QQ对话聊天功能脚本的更多相关文章

  1. 网页调启用qq对话聊天客服窗口的链接地址方法大全(包含移动端)

    z转自:    http://www.wazhuti.com/1781.html 在PC端,腾讯的QQ软件还是应用最为广泛的即时通讯工具了,除了网站自动的一些对话软件外,qq可以有效的将用户留存下来, ...

  2. 类似QQ侧滑菜单功能实现

    之前的那文章简单实现了菜单侧拉功能,但是做不到像QQ那样导航条和tabBar一起移动...之后在网上找资料,有了思路,就自个写了个demo试试水. 先创建QHLMainController控制器,并把 ...

  3. java网络编程(三):一个类似QQ的聊天程序

    客户端: package QQ; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import ...

  4. AndroidRichText 让Textview轻松的支持富文本(图像ImageSpan、点击效果等等类似QQ微信聊天)

    代码地址:https://github.com/Luction/AndroidRichText AndroidRichText帮助实现像QQ,微信一样的,一个TextView里既有文字又有表情又有图片 ...

  5. 类似QQ的聊天工程

    首先建立一个html:<!DOCTYPE html><html lang="en"><head> <meta charset=" ...

  6. 用C#代码实现类似QQ窗体的“上、左、右”停靠功能

    大家都知道QQ有一个自动停靠功能,即“上.左.右”,当你把窗体拖到屏幕边缘,然后移开鼠标它会自动缩放,然后只显示一小小点出来,我们仔细观察会发现其实它只露3像素左右的边缘,当你鼠标移上去它又会伸出来, ...

  7. 详解C# 网络编程系列:实现类似QQ的即时通信程序

    https://www.jb51.net/article/101289.htm 引言: 前面专题中介绍了UDP.TCP和P2P编程,并且通过一些小的示例来让大家更好的理解它们的工作原理以及怎样.Net ...

  8. [C# 网络编程系列]专题九:实现类似QQ的即时通信程序

    转自:http://www.cnblogs.com/zhili/archive/2012/09/23/2666987.html 引言: 前面专题中介绍了UDP.TCP和P2P编程,并且通过一些小的示例 ...

  9. 转:【专题九】实现类似QQ的即时通信程序

    引言: 前面专题中介绍了UDP.TCP和P2P编程,并且通过一些小的示例来让大家更好的理解它们的工作原理以及怎样.Net类库去实现它们的.为了让大家更好的理解我们平常中常见的软件QQ的工作原理,所以在 ...

随机推荐

  1. 《JavaScript DOM编程艺术》读后总结

    这是我读的第一本关于JS的书,刚开始我为了选择合适的学习JS的书,看了网上许多人的意见,基本上都是推荐先读这本书.书的内容挺简单的,确实很适合初学者看,阅读的过程中不会产生什么障碍.内容虽然简单,但我 ...

  2. js 字符串转换成数字的三种方法

    在js读取文本框或者其它表单数据的时候获得的值是字符串类型的,例如两个文本框a和b,如果获得a的value值为11,b的value值为9 ,那么a.value要小于b.value,因为他们都是字符串形 ...

  3. 转:StrictMode使用

    最新的Android平台中(Android 2.3起),新增加了一个新的类,叫StrictMode(android.os.StrictMode).这个类可以用来帮助开发者改进他们编写的应用,并且提供了 ...

  4. 用php脚本给html中引用的js和css路径打上版本

    比如 <link rel="stylesheet" type="text/css" href="./css/globel.css"&g ...

  5. (转)如何进行Monkey Test

    如何进行Monkey Test   目录 一 简介 二 测试准备 三 基本命令格式 四 测试Log获取 五 Monkey命令参数介绍 六 保存monkey log以及手机log到sdcard(新增) ...

  6. unity行为树制作AI简单例子(1)

    用行为树来制作AI是非常方便的,今天就给大家简单介绍一下行为树的强大之处. 所用插件 Behavior Designer v1.421 最开始 我使用过Rain插件,不过用过Behavior Desi ...

  7. Linux-磁盘及网络IO工作方式解析

    PIO与DMA 有必要简单地说说慢速I/O设备和内存之间的数据传输方式. PIO我们拿磁盘来说,很早以前,磁盘和内存之间的数据传输是需要CPU控制的,也就是说如果我们读取磁盘文件到内存中,数据要经过C ...

  8. python logging模块

    1.logging模块提供了四个组件logger:日志类,有两个功能1)配置日志的等级,处理器handler,过滤器filterlogger.setLevel(logging.INFO)logger. ...

  9. 002. Centos7安装mysql5.5.37

    下载cmake-2.8.12.2.tar.gz, 下载地址: https://pan.baidu.com/s/1qYtpX7m 下载mysql-5.5.37.tar.gz, 下载地址: http:// ...

  10. CSS 相邻兄弟选择器

    相邻兄弟选择器(Adjacent sibling selector)可选择紧接在另一元素后的元素,且二者有相同父元素. 选择相邻兄弟 如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,可以 ...