• 实现类似QQ对话聊天功能脚本


    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 == " " && 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;    
    }

  • 相关阅读:
    pytorchdeeplabxception Public 分割模型训练
    浪潮服务器 使用远控安装centos图文步骤
    某系统开发全程记录(20220608)
    计算机网络协议
    使用ACME工具来生成TSL证书
    数据库日志文件ldf过大解决方案
    20192404 202120222 《网络与系统攻防技术》实验八实验报告
    收缩日志
    .NET Core WebAPI文件下载+断点续传+取消下载
    以管理员身份运行WinForm程序
  • 原文地址:https://www.cnblogs.com/943711466qq/p/4631590.html
Copyright © 2020-2023  润新知