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

Unity InputField 滑动滚轮 实现对文本的滚动

 一。效果演示:


 

 二。实现原理:

创建一个脚本KeInputScroll.cs 继承InputField类和IScrollHandler接口。如下面代码所示:

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;public class KeInputScroll : InputField, IScrollHandler
{public float SpeedRate = 5f;//滑动速率;private float timer = 0;//计时器;private Color preColor;//选中文本颜色;private bool IsChange = false;public void OnScroll(PointerEventData eventData){// Debug.Log("滚动");if (!IsChange){IsChange = true;preColor = selectionColor;selectionColor = new Color(0, 0, 0, 0); // 透明}Kekescroll(eventData);}private void Kekescroll(PointerEventData eventData){while (timer <= SpeedRate){timer++;// 根据是否多行模式判断滚动方向if (multiLine) // 纵向滚动{if (eventData.scrollDelta.y > 0)//滚轮向上滑动;MoveUp(true, true);else if (eventData.scrollDelta.y < 0)//滚轮向下滑动;MoveDown(true, true);}else// 横向滚动{if (eventData.scrollDelta.y > 0)//滚轮向上滑动;MoveLeft(true, false);else if (eventData.scrollDelta.y < 0)//滚轮向下滑动;MoveRight(true, false);}UpdateLabel();}timer = 0;}public override void OnBeginDrag(PointerEventData eventData){base.OnBeginDrag(eventData);if (IsChange){IsChange = false;selectionColor = preColor;//恢复选中颜色;}}}

 

三。出现问题:与解决办法

但是会遇到报错:因为MoveUp等方法 在InputField类中是私有的,解决办法当然有,就是修改为public 可以访问的权限

 直接打开并编辑了 InputField.cs 文件(例如扩展输入框功能)
然而官方 UGUI 组件的源代码位于 Unity 的不可变包中,直接修改会导致以下问题
  • 修改会被覆盖:当 Unity 更新、重新导入包或执行 Reset Packages 时,你的改动会丢失
  1. 什么是不可变包(Immutable Package)
    Unity 的包分为两种类型:
    • 不可变包:由 Unity 官方维护的核心功能包(如 com.unity.ugui),这些包通过 Package Manager 安装,不允许直接修改
    • 可变包:用户自定义或第三方插件包,可以自由修改。
  2. 如何安全地扩展 UGUI 组件?

将ugui包本地化,就可以自由修改了。 操作步骤

打开项目工程所在文件夹

 

参考链接Unity - 如何修改一个 Package 或是如何将 Package Local化_unity修改package文件夹-CSDN博客 效果如下:

 

四。使用该脚本: 

1.先正常创建该ui组件 

2. 然后移除原InputField:

 

3. 然后把该新脚本拖拽到这里,并且需要重新为文本组件赋值。

 

然后就能够使用了。 

 

http://www.lryc.cn/news/2386835.html

相关文章:

  • 机械设计插件
  • Monorepo 管理
  • RabbitMQ核心机制——延迟队列
  • 华为云Flexus+DeepSeek征文|Flexus云服务器Dify-LLM资源部署极致体验Agent
  • IP 网段
  • 芋道框架 - 接口设置匿名访问
  • 熔盐核裂变反应堆:第四代核能技术的重要突破
  • 鸿蒙OSUniApp 实现的日期选择器与时间选择器组件#三方框架 #Uniapp
  • Linux云计算训练营笔记day16(Linux周期性计划任务、Python)
  • 对比Redis与向量数据库(如Milvus)在AI中的应用
  • 【Elasticsearch入门到落地】13、DSL查询详解:分类、语法与实战场景
  • [欠拟合过拟合]机器学习-part10
  • 【windwos】文本编辑器Notepad++ 替代品Notepad--
  • Linux基本指令篇 —— clear指令
  • Anaconda 的基础教程,从入门到精通
  • 阿里云DDoS防护:万一被“黑”了,如何更换IP地址?
  • 机器学习笔记【Week2】
  • 饭卡管理系统(接口文档)
  • 【小白量化智能体】应用2:编写通达信绘图指标及生成Python绘图程序
  • C++23 std::start_lifetime_as:用于隐式生存期类型的显式生存期管理函数 (P2590R2)
  • 总结:进程和线程的联系和区别
  • Innodb底层原理与Mysql日志机制深入刨析
  • JMeter-SSE响应数据自动化
  • 泛型(1)
  • esp8266 点灯科技远程控制继电器
  • MMA: Multi-Modal Adapter for Vision-Language Models论文解读
  • Java中Map集合的遍历方式详解
  • 使用 Cannonballs 进行实用导体粗糙度建模
  • Spring Boot 注解 @ConditionalOnMissingBean是什么
  • 国外常用支付流程简易说明(无代码)