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

Unity InputField + ScrollRect实现微信聊天输入框功能

1、实现动态高度尺寸的的InputField

通过这两个部件就可以实现inputField的动态改变尺寸。

将inputField放入到scrollview当中作为子类

将scrollview 链接到UIChatInputField脚本中。

2、实现UIChatInputField

 //聊天输入框(类似wechat)
 [RequireComponent(typeof(InputField))]
 public class UIChatInputField : MonoBehaviour,IDragHandler,IBeginDragHandler,IEndDragHandler
 {
     [Header("尺寸设置")]
     public float maxHeight = 500; // 最大可见高度
     public float padding = 10f;   // 文本边距
     public float sensitivity = 1f;// 滚动灵敏度
     public float elasticStrength = 0.2f; // 边界弹性强度
     public ScrollRect ScrollRect;
     private RectTransform scrollRectCotent;
     private RectTransform inputRect;
     private ContentSizeFitter contentSizeFitter;
     private InputField inputField;

     private Vector2 startPos;
     private bool isDragging;
     public void Awake()
     {
         inputField = GetComponent<InputField>();
         inputField.onValueChanged.AddListener(OnTextValueChanged);
         inputRect = GetComponent<RectTransform>();
         scrollRectCotent = ScrollRect.content;
         contentSizeFitter = GetComponent<ContentSizeFitter>();
     }

     Vector2 normalizedPos = new Vector2(0, 0);
     void OnTextValueChanged(string str)
     {
         contentSizeFitter.SetLayoutVertical();
         Vector2 sizeDelta = inputRect.sizeDelta;
         ScrollRect.content.sizeDelta = sizeDelta;
         if (inputRect.sizeDelta.y >= maxHeight)
         {
             sizeDelta.y = maxHeight;
         }
         RectTransform rectsCroll = ScrollRect.GetComponent<RectTransform>();
         rectsCroll.sizeDelta = sizeDelta;
         ScrollRect.normalizedPosition = normalizedPos;
     }

     private float GetScrollRange()
     {
         return Mathf.Max(0, scrollRectCotent.rect.height - ScrollRect.viewport.rect.height);
     }

     //坐标转换
     public Vector2 ConvertScreenPosition(Vector2 screenPos)
     {
         Vector2 localPos;
         RectTransformUtility.ScreenPointToLocalPointInRectangle(ScrollRect.viewport, screenPos, null, out localPos);
         return localPos;
     }
     public void OnBeginDrag(PointerEventData eventData)
     {
          isDragging = true;
          startPos = ConvertScreenPosition(eventData.position);
          ScrollRect.StopMovement();
     }

     public void OnDrag(PointerEventData eventData)
     {
         if (!isDragging)
             return;

         Vector2 currentPos = ConvertScreenPosition(eventData.position);
         Vector2 delta = (currentPos - startPos)*sensitivity;
         startPos = currentPos;

         // 转换为标准化位置
         float newNormalizedPos = ScrollRect.verticalNormalizedPosition + delta.y / GetScrollRange();
         newNormalizedPos = Mathf.Clamp01(newNormalizedPos); // 基础限制

         // 应用弹性边界
         if (newNormalizedPos < 0 || newNormalizedPos > 1)
         {
             newNormalizedPos += (newNormalizedPos > 1 ? -1 : 1) * elasticStrength;
         }

         // 更新滚动位置
         ScrollRect.verticalNormalizedPosition = newNormalizedPos;
     }

     public void OnEndDrag(PointerEventData eventData)
     {
         isDragging = false;
     }
 }

效果如:

相关文章:

Unity InputField + ScrollRect实现微信聊天输入框功能

1、实现动态高度尺寸的的InputField 通过这两个部件就可以实现inputField的动态改变尺寸。 将inputField放入到scrollview当中作为子类 将scrollview 链接到UIChatInputField脚本中。 2、实现UIChatInputField //聊天输入框&#xff08;类似wechat&#xff09; [RequireComp…...

Java-servlet(三)Java-servlet-Web环境搭建(下)详细讲解利用maven和tomcat搭建Java-servlet环境

Java-servlet&#xff08;三&#xff09;Java-servlet-Web环境搭建&#xff08;下&#xff09;利用maven和tomcat搭建Java-servlet环境 前言一、配置maven阿里镜像二、利用IDEA创建maven文件创建maven文件删除src文件创建新的src模版删除example以及org文件 三、在第二个xml文件…...

在 CLion 中使用 Boost.Test 进行 C++ 单元测试

1. 安装 Boost.Test Boost.Test 是 Boost C 库的一部分&#xff0c;因此需要安装完整的 Boost 库。 方法 1&#xff1a;使用包管理器安装&#xff08;推荐&#xff09; Windows&#xff08;vcpkg&#xff09; 直接使用 CLion 集成的 vcpkg安装 boost-test&#xff1a; 也可…...

极狐GitLab 17.9 正式发布,40+ DevSecOps 重点功能解读【二】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…...

文本处理Bert面试内容整理-BERT的预训练任务是什么?

BERT的预训练任务主要有两个,分别是 Masked Language Model (MLM) 和 Next Sentence Prediction (NSP)。这两个任务帮助BERT学习从大规模未标注文本中提取深层次的语义和上下文信息。 1. Masked Language Model (MLM)(掩码语言模型)...

【蓝桥杯】每天一题,理解逻辑(3/90)【Leetcode 快乐数】

闲话系列&#xff1a;每日一题&#xff0c;秃头有我&#xff0c;Hello&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;,我是IF‘Maxue&#xff0c;欢迎大佬们来参观我写的蓝桥杯系列&#xff0c;我好久没有更新博客了&#xff0c;因为up猪我寒假用自己的劳动换了…...

“深入浅出”系列之Linux篇:(10)基于C++实现分布式网络通信RPC框架

分布式网络通信rpc框架 项目是分布式网络通信rpc框架&#xff0c; 文中提到单机服务器的缺点&#xff1a; 硬件资源的限制影响并发&#xff1a;受限于硬件资源&#xff0c;聊天服务器承受的用户的并发有限 模块的编译部署难&#xff1a;任何模块小的修改&#xff0c;都导致整…...

Python的那些事第四十一篇:简化数据库交互的利器Django ORM

Django ORM:简化数据库交互的利器 摘要 随着互联网技术的飞速发展,Web开发越来越受到重视。Django作为一款流行的Python Web框架,以其高效、安全、可扩展等特点受到了广大开发者的喜爱。其中,Django ORM(对象关系映射)是Django框架的核心组件之一,它为开发者提供了一种…...

[自动驾驶-传感器融合] 多激光雷达的外参标定

文章目录 引言外参标定原理ICP匹配示例参考文献 引言 多激光雷达系统通常用于自动驾驶或机器人&#xff0c;每个雷达的位置和姿态不同&#xff0c;需要将它们的数据统一到同一个坐标系下。多激光雷达外参标定的核心目标是通过计算不同雷达坐标系之间的刚性变换关系&#xff08…...

初学STM32之简单认识IO口配置(学习笔记)

在使用51单片机的时候基本上不需要额外的配置IO&#xff0c;不过在使用特定的IO的时候需要额外的设计外围电路&#xff0c;比如PO口它是没有内置上拉电阻的。因此若想P0输出高电平&#xff0c;它就需要外接上拉电平。&#xff08;当然这不是说它输入不需要上拉电阻&#xff0c;…...

【长安大学】苹果手机/平板自动连接认证CHD-WIFI脚本(快捷指令)

背景&#xff1a; 已经用这个脚本的记得设置Wifi时候&#xff0c;关闭“自动登录” 前几天实在忍受不了CHD-WIFI动不动就断开&#xff0c;一天要重新连接&#xff0c;点登陆好几次。试了下在网上搜有没有CHD-WIFI的自动连接WIFI自动认证脚本&#xff0c;那样我就可以解放双手&…...

powermock,mock使用笔记

介于日本的形式主义junit4单体测试&#xff0c;特记笔记&#xff0c;以下纯用手机打出来&#xff0c;因为电脑禁止复制粘贴。 pom文件 powermock-module-junit1.7.4 powermock-api-mokcito 1.7.4 spring-test 8 1&#xff0c;测试类头部打注解 RunWith(PowerMockRunner.class…...

大模型微调实战指南

1. 引言 在人工智能领域&#xff0c;大模型&#xff08;如GPT、BERT、DeepSeek等&#xff09;已经展现出了强大的通用能力。然而&#xff0c;要让这些模型在特定任务或领域中发挥最佳性能&#xff0c;微调&#xff08;Fine-tuning&#xff09;是必不可少的一步。本文将带你从零…...

计算机毕业设计Python+Django+Vue3微博数据舆情分析平台 微博用户画像系统 微博舆情可视化(源码+ 文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

HTML第四节

一.复合选择器 1.后代选择器 注&#xff1a;1.后代选择器会选中后代所有的要选择的标签 2.儿子选择器 3.并集选择器 注&#xff1a;1.注意换行&#xff0c;同时选中多种标签 4.交集选择器 注&#xff1a;1.标签选择器放在最前面&#xff0c;例如放在类选择器的前面 2.两个选择…...

Kubernetes 的正式安装

1.基础的网络结构说明 软件路由器 ikuai 当然同一个仅主机模式 相当于在 同一个我们所谓的广播域内 所以相当于它们的几张网卡 是被连接起来的 为了防止出现问题 我们可以把第二块网卡临时关闭一下 2.准备路由器 ikuai 爱快 iKuai-商业场景网络解决方案提供商 (ikuai8.com)…...

VS2022C#windows窗体应用程序调用DeepSeek API

目录 一、创建DeepSeek API Key 二、创建窗体应用程序 三、设计窗体 1、控件拖放布局‌‌ 2、主窗体【Form1】设计 3、多行文本框【tbContent】 4、提交按钮【btnSubmit】 5、单行文字框 四、撰写程序 五、完整代码 六、运行效果 七、其它 一、创建DeepSeek API Ke…...

7. 机器人记录数据集(具身智能机器人套件)

1. 树莓派启动机器人 conda activate lerobotpython lerobot/scripts/control_robot.py \--robot.typelekiwi \--control.typeremote_robot2. huggingface平台配置 huggingface官网 注册登录申请token&#xff08;要有写权限&#xff09;安装客户端 # 安装 pip install -U …...

阿里云操作系统控制台——ECS操作与性能优化

引言&#xff1a;在数字化时代&#xff0c;云服务器作为强大的计算资源承载平台&#xff0c;为企业和开发者提供了灵活且高效的服务。本文将详细介绍如何一步步操作云服务器 ECS&#xff0c;从开通到组件安装&#xff0c;再到内存全景诊断&#xff0c;帮助快速上手&#xff0c;…...

在飞腾E2000Q开发板上,基于RT-Thread操作系统,实现DeepSeek语音交互

目录 一 &#xff0c;简介 二 &#xff0c;流程与结果分享 1. Phytium E2000q demo开发板连接 2. RT-Thread Kconfig 配置选择 &#xff08;1&#xff09;驱动 &#xff08;2&#xff09;软件包 3. 主要代码 &#xff08;1&#xff09;录音功能&#xff0c;将录音结果保存…...

navicat导出postgresql的数据库结构、字段名、备注等等

1、执行sql语句 SELECT A.attnum AS "序号",C.relname AS "表名",CAST ( obj_description ( relfilenode, pg_class ) AS VARCHAR ) AS "表名描述",A.attname AS "字段名称",A.attnotnull as "是否不为null",(case when A…...

K8s 1.27.1 实战系列(三)安装网络插件

Kubernetes 的网络插件常见的有 Flannel 和 Calico ,这是两种主流的 CNI(容器网络接口)解决方案,它们在设计理念、实现方式、性能特征及适用场景上有显著差异。以下是两者的综合对比分析: 一、Flannel 和 Calico 1. 技术基础与网络实现 Flannel 核心机制:基于 Overlay …...

Python实现鼠标点击获取窗口进程信息

最近遇到挺无解的一个问题&#xff1a;电脑上莫名其妙出现一个白色小方块&#xff0c;点击没有反应&#xff0c;关也关不掉&#xff0c;想知道它和哪个软件有关还是显卡出了问题&#xff0c;也找不到思路&#xff0c;就想着要不获取一下它的进程号看看。 于是写了一个Python脚本…...

文件解析:doc、docx、pdf

1.doc解析 ubuntu/debian系统应先安装工具 apt-get install python-dev libxml2-dev libxslt1-dev antiword unrtf poppler-utils pstotext tesseract-ocr \ flac ffmpeg lame libmad0 libsox-fmt-mp3 sox libjpeg-dev swig pip install textract解析&#xff1a; import te…...

JDBC 完全指南:掌握 Java 数据库交互的核心技术

JDBC 完全指南&#xff1a;掌握 Java 数据库交互的核心技术 一、JDBC 是什么&#xff1f;为什么它如此重要&#xff1f; JDBC&#xff08;Java Database Connectivity&#xff09;是 Java 语言中用于连接和操作关系型数据库的标准 API。它允许开发者通过统一的接口访问不同的数…...

【STM32】STM32系列产品以及新手入门的STM32F103

&#x1f4e2; STM32F103xC/D/E 系列是一款高性能、低功耗的 32 位 MCU&#xff0c;适用于工业、汽车、消费电子等领域&#xff1b;基于 ARM Cortex-M3&#xff0c;主频最高 72MHz&#xff0c;支持 512KB Flash、64KB SRAM&#xff0c;适合复杂嵌入式应用&#xff0c;提供丰富的…...

esp32驱动带字库芯片TFT屏幕

前言 学习esp32单片机开发&#xff0c;前段时间在网上买了一块2.0寸TFT屏幕。 长这个样子&#xff0c;这个屏幕带汉字字库的硬件模块。我仔细看了一下这个字库模块上面写的字是25Q32FVSIG 1336 文档 卖家也发来了开发文档&#xff0c;是个doc文档&#xff0c;张这个样子。 开…...

[Python入门学习记录(小甲鱼)]第5章 列表 元组 字符串

第5章 列表 元组 字符串 5.1 列表 一个类似数组的东西 5.1.1 创建列表 一个中括号[ ] 把数据包起来就是创建了 number [1,2,3,4,5] print(type(number)) #返回 list 类型 for each in number:print(each) #输出 1 2 3 4 5#列表里不要求都是一个数据类型 mix [213,"…...

网络安全等级保护2.0 vs GDPR vs NIST 2.0:全方位对比解析

在网络安全日益重要的今天&#xff0c;各国纷纷出台相关政策法规&#xff0c;以加强信息安全保护。本文将对比我国网络安全等级保护2.0、欧盟的GDPR以及美国的NIST 2.0&#xff0c;分析它们各自的特点及差异。 网络安全等级保护2.0 网络安全等级保护2.0是我国信息安全领域的一…...

由麻省理工学院计算机科学与人工智能实验室等机构创建低成本、高效率的物理驱动数据生成框架,助力接触丰富的机器人操作任务

2025-02-28&#xff0c;由麻省理工学院计算机科学与人工智能实验室&#xff08;CSAIL&#xff09;和机器人与人工智能研究所的研究团队创建了一种低成本的数据生成框架&#xff0c;通过结合物理模拟、人类演示和基于模型的规划&#xff0c;高效生成大规模、高质量的接触丰富型机…...

leetcode15 三数之和

1.哈希法 为了避免重复 class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {set<vector<int>> temple;//使用 set 来存储符合条件的三元组&#xff0c;避免重复vector<vector<int>> out;//存放最终输…...

5c/c++内存管理

1. C/C内存分布 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)malloc(sizeof(int) * 4);i…...

蓝桥备赛(11)- 数据结构、算法与STL

一、数据结构 1.1 什么是数据结构&#xff1f; 在计算机科学中&#xff0c;数据结构是一种 数据组织、管理和存储的格式。它是相互之间存在一种 或多种特定关系的数据元素的集合。 ---> 通俗点&#xff0c;数据结构就是数据的组织形式 &#xff0c; 研究数据是用什么方…...

C++ 二叉搜索树代码

C 二叉搜索树代码 #include <iostream> using namespace std;template<typename T> struct TreeNode{T val;TreeNode *left;TreeNode *right;TreeNode():val(0), left(NULL), right(NULL){}TreeNode(T x):val(x), left(NULL), right(NULL){} };template<typena…...

Flask 打包为exe 文件

进入虚拟环境 激活虚拟环境 .venv\Scripts\activatepython build.py 完成标识图片 已经完成打包了&#xff0c;完成&#xff0c;下边是我自己记录的 这时候&#xff0c;我自己数据库文件夹下是没有sql 脚本的&#xff0c;要自己拷贝下这个路径下的文件 E:\开源文件\python-wi…...

JavaWeb-idea配置smart tomcat

一&#xff0c;安装smart tomcat插件 在插件市场搜索smart tomcat 点击安装&#xff0c;我已经安装成功。 二&#xff0c;web项目配置tomcat 点击这里&#xff0c;选择edit 进来之后&#xff0c;选加号 然后选tomcat 在这里&#xff0c;配置完毕后&#xff0c;点apply&…...

DELETE/ UPDATE/ INSERT 语句会自动加锁

在数据库系统中&#xff0c;DELETE、UPDATE 和 INSERT 语句通常会自动加锁&#xff0c;以确保数据的一致性和并发控制。具体的锁类型和效果取决于数据库的实现&#xff08;如 MySQL、PostgreSQL 等&#xff09;以及事务的隔离级别。以下是这些操作通常加锁的行为和效果&#xf…...

docker本地部署ollama

启动ollama容器 1.使用该命令启动CPU版运行本地AI模型 docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama 2.此命令用于启动GPU版本运行AI模型 前提是笔记本已配置NVIDIA的GPU驱动&#xff0c;可在shell中输入nvidia-smi查看详细情况…...

Linux线程机制

Linux 操作系统中的线程机制是基于 POSIX 线程&#xff08;Pthreads&#xff09; 标准实现的&#xff0c;通常称为 pthread。Linux 内核通过Native POSIX Thread Library提供了对多线程的支持。 1. 线程的基本概念 线程是进程中的一个执行单元&#xff0c;是 CPU 调度的基本单…...

LeetCode热题100JS(44/100)第八天|二叉树的直径|二叉树的层序遍历|将有序数组转换为二叉搜索树|验证二叉树搜索树|二叉搜索树中第K小的元素

543. 二叉树的直径 题目链接&#xff1a;543. 二叉树的直径 难度&#xff1a;简单 刷题状态&#xff1a;1刷 新知识&#xff1a; 解题过程 思考 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,4,5] 输出&#xff1a;3 解释&#xff1a;3 &#xff0c;取路径 [4,2,1,3] 或…...

Java与数据库

目录 一.本文焦点&#xff1a; 二.数据库常用数据类型 三.对数据库操作 四.对数据库中的表操作 五.条件表达 六. 表查询操作进阶 1.多表连接查询 1&#xff09;交叉连接查询 2&#xff09;内连接&#xff08;取两表交集&#xff09; 3&#xff09;外连接 4&#xff09…...

MySQL表中数据基本操作

1.表中数据的插入&#xff1a; 1.insert insert [into] table_name [(column [,column]...)] values (value_list) [,(value_list)] ... 创建一张学生表&#xff1a; 1.1单行指定列插入&#xff1a; insert into student (name,qq) values (‘张三’,’1234455’); values左…...

基于GeoTools的GIS专题图自适应边界及高宽等比例生成实践

目录 前言 一、原来的生成方案问题 1、无法自动读取数据的Bounds 2、专题图高宽比例不协调 二、专题图生成优化 1、直接读取矢量数据的Bounds 2、专题图成果抗锯齿 3、专题成果高宽比例自动调节 三、总结 前言 在当今数字化浪潮中&#xff0c;地理信息系统&#xff08;…...

蓝桥与力扣刷题(蓝桥 数字三角形)

题目&#xff1a; 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径&#xff0c;把路径上面的数加起来可以得到一个和&#xff0c;你的任务就是找到最大的和&#xff08;路径上的每一步只可沿左斜线向下或右斜线向下走&#xff09;。 输入描述…...

6. PromQL的metric name(在node exporter复制下来交给AI解释的)

目录 前言&#xff1a; Go 运行时指标&#xff1a; Go 内存统计指标&#xff1a; CPU 指标&#xff1a; 内存指标&#xff1a; 磁盘指标&#xff1a; 网络指标&#xff1a; 系统指标&#xff1a; 前言&#xff1a; 写这个得目的是为了后续方便查询&#xff0c;因为在pro…...

Windows设置目录及子目录大小写不敏感暨git克隆报错同名文件已存在的解决办法

在Windows系统中设置目录及其子目录为大小写不敏感&#xff0c;可以通过以下步骤完成&#xff1a; 步骤说明&#xff1a; 以管理员身份运行命令提示符或PowerShell 右键点击“开始”菜单&#xff0c;选择“命令提示符&#xff08;管理员&#xff09;”或“Windows PowerShell&…...

关于tresos Studio(EB)的MCAL配置之GPT

概念 GPT&#xff0c;全称General Purpose Timer&#xff0c;就是个通用定时器&#xff0c;取的名字奇怪了点。定时器是一定要的&#xff0c;要么提供给BSW去使用&#xff0c;要么提供给OS去使用。 配置 General GptDeinitApi控制接口Gpt_DeInit是否启用 GptEnableDisable…...

VScode 中文符号出现黄色方框的解决方法

VScode 中文符号出现黄色方框的解决方法 我的vscode的python多行注释中会将中文字符用黄色方框框处&#xff1a; 只需要打开设置搜索unicode&#xff0c;然后将这一项的勾选取消掉就可以了&#xff1a; 取消之后的效果如下&#xff1a; 另一种情况&#xff1a;中文显示出现黄色…...

WordPress使用(3)

前面文章讲述了如何利用docker进行wordpress系统的安装及相关设置&#xff0c;本文将介绍如何进行站点数据和数据库数据的备份。 1. 备份数据库 # 进入mysql容器内部 docker exec -it mysqlwp bash# 使用mysqldump 命令导出数据库 mysqldump -u root -p wordpress > wordp…...

Shell编程概述与Shell变量

目录 一、Shell编程基础 1.1、Shell脚本使用场景 1.2、Shell脚本的格式 1.3、Shell脚本的执行 1.4、Shell脚本错误调试 二、 重定向与管道符 2.1、重定向 2.2、管道符 三、Shell变量 3.1、变量分类 3.2、特殊符号 3.3、整数运算 3.4、read 3.5、局部变量与全局变量…...