Unity聊天对话框内容自适应宽高(无需代码辅助布局,不添加冗余组件)

这篇具有很好参考价值的文章主要介绍了Unity聊天对话框内容自适应宽高(无需代码辅助布局,不添加冗余组件)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

聊天框是Unity开发中常见的功能,不过要做好聊天框的自适应需要一些布局方面的知识。

大致效果如图:

1.文字内容不足最大宽度时,文字背景和文字宽度吻合

2.文字内容超过最大宽度时,自动增加高度

3.右边聊天框跟随聊天面板最右侧对齐

4.文字内容的最大限宽跟随整个聊天面板的宽度缩放而缩放

unity 聊天框组件,unity3d,ui

在刚开始准备实现这个自适应时,在网上查阅了大量文章,发现大部分有以下情况:

有些需要代码来设置,当宽度达到最大限制宽度时,需要代码控制文字的Content Size Fitter竖直方向适配。

还有基本都是在文本内容的Text组件上加了Content Size Fitter,在父物体有LayoutGroup组件时,会报警告,虽然我们要的效果好像也实现了。

unity 聊天框组件,unity3d,ui

但是这是有问题的,这样实现经常在需要重新进行layout的时候会发生排版错误,尽管可以通过,在代码中主动使用一些比较笨拙的方法解决,如SetActive(false)物体之后再SetActive(true),或者需要额外添加代码LayoutRebuilder.ForceRebuildLayoutImmediate(),这样排版才正常了。

基于上述情况,希望能无需代码辅助适配,只需最外层添加Content Size Fitter组件,里面任何节点不需要再添加,避免unity的警告,这样也不需要强制刷新来使得面板及时更新为正确的自适应,省心省力。

对于布局组件LayoutGroup的ControlChildSize和ChildForceExpand不太理解的可以看看这篇文章:Unity UGUI自适应布局系统详解,简而言之,ControlChildSize就是根据子对象期望的长宽强制控制他的长宽值,ChildForceExpand就是当子物体长宽不能填充满父物体时,就扩张子物体的长宽值。

unity 聊天框组件,unity3d,ui

(一个ui元素期望的长宽值,比如:一张图片的期望长宽,是这张图片的像素值,而不是这个节点RectTransform的长宽,文字内容的期望长宽就是根据字号和字数还有字体计算出来的长宽)

 具体布局如下:

unity 聊天框组件,unity3d,ui

节点组件详情:

聊天面板ChatPanel:竖向布局,强制控制子对象的宽度和高度,并且扩张子物体的宽度,只有扩张子物体的宽度,才能实现效果中的第3点,使右侧聊天气泡对齐的位置,一直是最右侧,只需要在这个最外层节点上加Content Size Fitter组件即可

unity 聊天框组件,unity3d,uiunity 聊天框组件,unity3d,ui

聊天气泡预制体ChatRootLeft:其中距离右侧固定220的作用就是效果4,对话框的最大宽度随着聊天面板的宽度缩放,它不需要扩张子元素,由于面板上的ControlChildSize组件,会自动扩展文字内容的宽度和高度,当文字过于长时,距离右侧220的设置,会限制最下层的Text组件,阻止它继续宽下去,开始在高度上增加

unity 聊天框组件,unity3d,uiunity 聊天框组件,unity3d,ui

ChatItem:横向布局头像以及名称文字内容,将强制控制Text宽高的需求传递下去

unity 聊天框组件,unity3d,uiunity 聊天框组件,unity3d,ui

imgHead:头像图片,添加LayoutElement组件辅助布局,不添加的话,图片的宽高就会是期望高度,而一般聊天框的头像,肯定是按照固定尺寸来的,这个组件辅助布局,在运算时,图片的期望高度就变成我们设定的值,希望多大,自己设

unity 聊天框组件,unity3d,uiunity 聊天框组件,unity3d,ui

nameAndContent:竖向布局,将强制控制Text宽高的需求传递下去

unity 聊天框组件,unity3d,uiunity 聊天框组件,unity3d,ui

txtName:名称元素,没有任何要求,Text组件即可

imgContentBG:文字的底图,8是底图比文字四个方向多出来的部分,继续将强制控制Text宽高的需求传递下去

unity 聊天框组件,unity3d,uiunity 聊天框组件,unity3d,ui

txtContent:上面的那些布局都是为了它的自适应,它本身没有啥需要添加的,Text组件即可。网上文章大部分都是在这里加ControlChildSize组件,但是会报警告,因为父节点上都有LayoutGroup组,而且会出现刷新不及时的问题,需要setactive预制体或者强制调用LayoutRebuilder.ForceRebuildLayoutImmediate()刷新页面才能正确。而按照上面的设置,是可以避免上述问题的。

unity 聊天框组件,unity3d,uiunity 聊天框组件,unity3d,ui

最后效果如下:

unity 聊天框组件,unity3d,ui

至于聊天框的头像,名称赋值,拖拽和遮罩就自己添加了,至于聊天气泡的可循环利用,这个网上很多,自己搜,要支持不规则尺寸的。文章来源地址https://www.toymoban.com/news/detail-763751.html

到了这里,关于Unity聊天对话框内容自适应宽高(无需代码辅助布局,不添加冗余组件)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity C# 打开windows对话框选择文件夹或选择文件

    unity没有提供打开windows对话框的api,在开发种也会遇到选择系统文件夹或选择系统文件的需求

    2024年04月26日
    浏览(34)
  • 【windows编程之对话框】对话框原理,对话框的创建

    在本章节中我们来讲解Windows/Win32编程中对话框的原理和对话框的创建,我们在前几篇章节中讲解到了普通窗口中回调函数的处理,在普通窗口的窗口消息处理函数(回调函数)中,系统会首先调用我们自己写的回调函数,我们自己编写的回调函数没有处理的消息,才会交给系

    2024年02月03日
    浏览(66)
  • 对话框之模式对话框与无模式对话框以及自定义消息

    模式对话框 创建模式对话框步骤 创建模式对话框模板 IDD_COptionsDialog 构造一个CDialog对象,并封装对话框模板 调用CDialog:Domal()显示对话框 无模式对话框 创建对话框模板 IDD_COptionsDialog 构造一个CDialog对象,并封装进对话框模板 单击菜单项显示无模式对话框

    2024年02月10日
    浏览(26)
  • 【Qt】对话框QDialog类,模态对话框和非模态对话框

    QDialog类是所有对话框窗口类的基类。对话框窗口是一个用来完成短小任务或和用户进行简单交互的 顶层窗口 。 按照运行对话框时是否还可以和该程序的其它窗口进行交互,将它分为两类:模态(modal)对话框和非模态(modaless)对话框。 模态对话框 先看一个例子: 创建一

    2024年02月05日
    浏览(38)
  • MFC 通用对话框之颜色对话框

    CColorDialog类封装了颜色对话框,此类允许您将颜色选择对话框合并到应用程序中。颜色对话框就像画家的调色板一样,可显示系统定义的颜色列表,用户可以从列表中选择或创建特定颜色。构造一个CColorDialog类对象后,可用 DoModal( ) 函数来显示颜色对话框。 CColorDialog 的构造

    2024年02月06日
    浏览(31)
  • Qt对话框——QInputDialog输入对话框

    Qt对话框——QInputDialog输入对话框 在Qt开发中,我们有时需要通过一个对话框获取用户的输入,而QInputDialog就是Qt框架提供的一种方便地弹出输入对话框并获取用户输入数据的方式。 QInputDialog使用非常简单,我们可以通过访问不同的接口来弹出输入对话框获取多种类型的返回

    2024年02月12日
    浏览(31)
  • MFC 通用对话框之文件对话框

    CFileDialog 类 封装了Windows通用文件对话框,Windows通用文件对话框提供了轻松实现与Windows标准一致的打开文件、保存文件、另存文件对话框的方法。 当我们用CFileDialog类的构造函数生成一个对象后就修改 m_ofn 结构体对象里的值, m_ofn 的类型为 OPENFILENAME。 CFileDialog类构造函数的

    2024年02月05日
    浏览(39)
  • Qt标准对话框:8大对话框详解

    颜色对话框类 QColorDialog 提供了一个可以获取指定颜色的对话框的对话框部件: 这里使用 QColorDialog 的静态函数 getColor () 来获取颜色,执行时弹出颜色选择对话框: 返回的是一个 QColor 类型的数据: 这四个数值分别代表:透明度(alpha)、Red、Green、Blue。它们的默认值都是

    2024年02月03日
    浏览(39)
  • Python Qt6快速入门-自定义对话框和标准对话框

    对话框是有用的 GUI 组件,可以与用户进行交流(因此得名对话框)。 它们通常用于文件打开/保存、设置、首选项或不适合应用程序主 UI 的功能。 它们是位于主应用程序前面的小模态(或阻塞)窗口,直到它们被关闭。 Qt 为最常见的用例提供

    2024年02月03日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包