当前位置: 首页 > news >正文

文本框 清空_只需5步,Unity中创建自滚动聊天室文本框

f85989a683d0281b5f15800ef8cc0535.png

初入Unity大门,在做界面时也走了一些弯路,这里记录下一些经验,也供分享。

想要创建一个可滚动的自动扩展文本框,并且在文本更新时能够自动滚动至最底部。在网上找了一些资料,都不太准确且有多余步骤,这里总结并精炼了一下步骤。

1、创建一个容器,用于添加ScrollRect组件,可以使用Panel也可以使用Image,推荐Panel。

c36e79ad6f9f62e508ccba5c9dad0769.png

2、在Panel下创建子元素Text,依需要设置好定位。

b8298cd1727914caeb081273f6380a79.png

这是我的定位设置,其中Pivot X=0, Y=0.01,注意的是高度设置是没有意义的,因为下面会通过组件来控制高度。

85f956ee01893a528baaeffa84536562.png

3、在Text中添加Layout组件中的Content Size Fitter,并设置Content Size Fitter中的Vertical Fit为”Preferred Size“。

7bf4a84b4bc0bd7e32f5c7df2a6bde38.png

4、回到Panel,添加UI组件中的Mask和Scroll Rect组件,并设置Scroll Rect中的Content为之前添加的Text控件。因为我并不需要水平滚动,所以也将Horizontal属性清空。

caea59b963e095b36d8b9f57c476b8ab.png

至此一个可滚动的文本框就建立完毕了,其文本显示范围由Panel决定。如果只是显示静态文本,在Text的text属性中输入文本即可。

下面是添加自动滚动代码的步骤。

5、打开代码编辑器,在你需要向该文本框输入内容的类中设定两个变量:

    [SerializeField]
    private Text textView;
    [SerializeField]
    private ScrollRect scrollControl;

添加如下函数:

    public void WriteText(string text)
    {
        textView.text += "n"+ text;
        StartCoroutine("ScrollToBottom");
    }

    IEnumerator ScrollToBottom()
    {
        yield return new WaitForEndOfFrame();        
        scrollControl.verticalNormalizedPosition = 0f;
    }

稍微解释一下,scrollControl.verticalNormalizedPosition = 0f; 就是实现滚动自底部的代码,之所以不能立即调用,是因为控件写入值后需要一帧的时间来绘制,因此此时的滚动条位置是不准确的,必须等待该帧绘制完毕,再执行该行代码。

6、保存代码,回到Unity编辑器,将Panel关联至scrollControl变量、Text关联至textView变量即可。

添加滚动条的步骤比较简单,这里就不赘述了。

所有步骤在 Unity2017.3.0f3 版本中测试通过。

相关文章:

  • java判断是否运行在windows terminal_判断制冷空调系统是否运行正常的5个参数
  • mpa和pis_psig与mpa换算(压力单位换算psi)
  • php环境mysql 5.5安装教程_win7(64位)php5.5-Apache2.4-mysql5.6环境安装
  • mysql分组去掉重复记录_mysql去掉重复数据只保留一条,以及取分组后的一条数据...
  • 查看mysql的位数_如何查看mysql是几位的
  • mysql 视图 行号_MySQL踩坑记之视图添加行号
  • dos 前一个命令_非常实用的几个DOS命令,轻松解决电脑问题
  • shell mysql命令的参数_Linux/Unix shell 参数传递到SQL脚本
  • shell 循环 mysql_shell脚本备份mysql数据库(for循环)
  • swift 路由管理_京东商城订单模块Swift探索
  • 修改图片创建时间_Linux如何查看文件的创建、修改时间?
  • mysql 范式化_Mysql范式与反范式
  • jsp ssh mysql是什么_JSP+SSH+Mysql实现的学生管理系统
  • MySQL备机比主机binlog大_关于PostgreSQL流复制的延迟
  • python tempfile模块用不了_Python tempfile模块和线程表现不佳;我做错了什么?
  • 网络传输文件的问题
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • Apache Spark Streaming 使用实例
  • ComponentOne 2017 V2版本正式发布
  • Date型的使用
  • docker容器内的网络抓包
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • HTTP那些事
  • javascript从右向左截取指定位数字符的3种方法
  • k8s如何管理Pod
  • Sass Day-01
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • use Google search engine
  • 分享一份非常强势的Android面试题
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 简单基于spring的redis配置(单机和集群模式)
  • 前端js -- this指向总结。
  • 深入浏览器事件循环的本质
  • 手写双向链表LinkedList的几个常用功能
  • 云大使推广中的常见热门问题
  • 仓管云——企业云erp功能有哪些?
  • 组复制官方翻译九、Group Replication Technical Details
  • #{}和${}的区别?
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (06)Hive——正则表达式
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (一)appium-desktop定位元素原理
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)jdk与jre的区别
  • (转)使用VMware vSphere标准交换机设置网络连接
  • ..回顾17,展望18
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET Core 成都线下面基会拉开序幕
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET gRPC 和RESTful简单对比
  • .NET与 java通用的3DES加密解密方法
  • .sys文件乱码_python vscode输出乱码
  • ?.的用法