unity制作聊天室界面

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

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

先上效果图GIF:

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

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

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

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

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

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

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

步骤一:布置组件

组件层布局如下:

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,使超出范围的内容不显示。

具体属性细节设置如下:

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  " + "<color=red>" + username + "</color>: " + 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

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

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

  • 19
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
### 回答1: Unity WebSocket 聊天室是一个使用 WebSocket 技术进行通信的聊天室案例。Unity 是一款游戏开发引擎,它提供了强大的图形渲染和物理引擎等功能,可以用于开发游戏、虚拟现实和增强现实应用等。 在 Unity 中实现 WebSocket 聊天室,需要首先使用 WebSocket 协议建立服务器和客户端之间的双向通信。WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,通过在客户端和服务器之间建立套接字连接,实现实时的数据传输。 通过 Unity 提供的网络库或第三方插件,我们可以使用 C# 语言编写 WebSocket 客户端代码。在聊天室中,客户端可以通过发送消息给服务器,同时也可以接收其他客户端发送的消息。服务器负责接收客户端的消息,并将其广播给其他在线的客户端。 实现 Unity WebSocket 聊天室的关键是处理来自客户端或服务器的消息,以及实时更新聊天室界面。在 Unity 中,可以通过定时器或协程等方式,定期从服务器获取最新的聊天消息。同时,还需要为客户端和服务器实现发送和接收消息的逻辑,例如,可以使用 JSON 序列化和反序列化来传输和处理消息数据。 在聊天室案例中,我们可以实现一些额外的功能,例如用户注册和登录、显示在线用户列表、私聊功能等。对于聊天室界面设计,可以使用 Unity 的 UI 系统来实现文字输入框、发送按钮和消息显示区域等控件。 总之,Unity WebSocket 聊天室案例是一个利用 Unity 强大的图形和网络功能,实现实时通信的应用场景。通过使用 WebSocket 技术和适当的消息处理,我们可以构建一个交互性强、实时性好的聊天室应用。 ### 回答2: Unity中使用WebSocket实现聊天室的案例有许多,我将用300字中文回答。 Unity的WebSocket是一种实现全双工通信的协议,可以在网络上实现实时的聊天功能。在Unity中使用WebSocket实现聊天室可以通过以下步骤: 首先,需要引入WebSocket库,例如使用第三方插件如WebSocketSharp或NativeWebSocket,或者通过自定义网络模块来实现WebSocket功能。 接下来,建立WebSocket连接。使用WebSocket的API,指定服务器的地址和端口连接到服务器。 然后,设置WebSocket的回调函数,例如OnOpen、OnMessage、OnClose和OnError,用于处理连接建立后的动作。这些回调函数可以根据实际需求来编写,例如当连接建立时可以显示连接成功的提示,当接收到服务器发送的消息时可以进行消息处理。 在聊天室中,发送消息操作需要通过Unity中的UI组件,例如InputField和Button,获取用户输入的内容,并发送给服务器。用户在输入框中输入消息后,点击发送按钮,将消息通过WebSocket发送给服务器。 在接收消息时,WebSocket的OnMessage回调函数将服务器发送的消息传递给Unity,在Unity中可以针对不同类型的消息进行处理,例如将聊天内容显示在聊天窗口中,并更新显示。 在聊天室中还可以添加一些其他功能,例如显示在线用户列表、实现私聊功能、表情包的使用等。 总结起来,使用Unity的WebSocket库可以实现实时的聊天室功能,通过建立WebSocket连接、设置回调函数、发送和接收消息等步骤,可以实现用户之间的即时通信。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值