unity制作聊天室界面

本文利用unity UGUI制作聊天室界面,按回车发送消息,带滚轮,可以查看之前的消息。

PS:本文不带通信功能,仅为界面制作。需要带socket通信功能的unity聊天室模板请评论留言。

先上效果图GIF:

unity制作聊天室界面_第1张图片

仿造LOL客户端游戏内聊天室,发送消息后会跳到最下面。

(LOL中是按回车才跳出这个聊天框,这个实现起来简单,这边就不演示了)

PS:看起来好像实现起来很简单- -但是百度没找到关键方法,想自己实现,做了一晚上加一早上还是不完美,

最后只好去谷歌搜一下看看unity英文论坛然后完美解决= =。这个故事告诉我们当你不知道怎么做一个功能的时候,

不要自己盲目瞎整,多查查谷歌,开发效率能提高很多= =就像我女票一样当一个找代码的一把好手也不错。

——————————————————————————————————————————————————

话不再多说了直接进入正题:

步骤一:布置组件

组件层布局如下:

unity制作聊天室界面_第2张图片

1、在UI的Canvas下创建一个panel,命名为ChatRoom,这个是控制一整个的聊天室的面板包括输入框。我gif图中最外面有一层很浅的边框,就是这个的边框了。

2、在ChatRoom下创建一个InputField,命名为ChatInputField,用来输入消息。

3、在ChatRoom下再创建一个panel,命名为ChatRoomPanel,这个是消息查看面板。

4、在ChatRoomPanel下创建一个滚动条Scrollbar,再创建一个panel面板命名为TextShowPanel。

5、在TextShowPanel中创建Text组件命名为ChatText,这个就是聊天的文本内容了。

6、调整大小使界面美观。(面板背景颜色在属性中的image-color中设置即可)

PS:我这个设计分很多层,之后可以独立控制比较方便,大家可以按需求设计不一定要这么来。

步骤二:设置属性

1、点击Scrollbar,将其Direction属性设置为Buttom to top

2、点击TextShowPanel,AddComponent添加组件Scroll Rect,再添加组件mask,使超出范围的内容不显示。

具体属性细节设置如下:

unity制作聊天室界面_第3张图片

content,也就是需要滚动的内容,把chatText拖进去。

因为只需要垂直滚动。所以只要勾上vertical。

下面的vertical scrollbar把scrollbar拖进去。

PS:这里注意,尽量将界面布局提前布置好,否则添加了scroll rect组件后,组件之间会互相影响。

3、点击ChatText,添加组件Content Size Fitter。设置Vertical Fit 为preffered size。如下:


这个组件的作用是使得文本框的大小随着文本内容的改变而改变。

步骤三:编写脚本

新建ControlChatRoom.cs

代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ControlChatRoom : MonoBehaviour {

    public InputField chatInput;
    public Text chatText;
    public ScrollRect scrollRect;
    string username = "DHX";
    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

        if (Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.KeypadEnter))
        {
            if (chatInput.text != "")
            {
                string addText = "\n  " + "" + username + ": " + chatInput.text;
                chatText.text += addText;
                chatInput.text = "";
                chatInput.ActivateInputField();
                Canvas.ForceUpdateCanvases();       //关键代码
                scrollRect.verticalNormalizedPosition = 0f;  //关键代码
                Canvas.ForceUpdateCanvases();   //关键代码
            }
        }

    }
}

将其附在最外层ChatRoom上,然后把对应组件拖入。如下:


关键的三句话代码,意思应该是定位到具体操作的canvas上,然后把滚动条定位到垂直的最下方。

。。我是这么理解的不知道准确与否,之后还会继续深入搞懂。

嗯。自此大功告成。

——————————————————————————

后记

本来还查到什么.value = 0;这一类方法,但是运行的时候总不完美,滚动条会跳来跳去的。

想自己通过代码改变文本框位置实现拖动到最下面,结果还是不完美。

最后静下心来想一想,问题肯定没有这么复杂的啊,无非就是自动扩容然后自动拉到最下面。

于是耐心的谷歌了一会,问题最终解决。

解决问题的代码来源于:

http://answers.unity3d.com/questions/801380/force-scrollbar-to-scroll-down-with-scrollrect.html

看了前几个都没有较好的解决需求就直接上手编了,,还是太自信了。。有时候真理总是被隐藏在后面。


编程真的需要细心耐心,很关键!!!!

你可能感兴趣的:(unity)