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

【Unity UGUI 交互组件——InputFild(TMP版本)(11)】

InputField(输入框)在实际开发中很常用,比如 登录/注册、 游戏内聊天系统、表单与配置等等。

一. 组成

在这里插入图片描述
如图所示,Unity InputField 组件结构解析

Unity InputField 组件结构解析

在 Unity 的 UGUI 系统中,InputField 是一个复合型交互组件,它由四个核心部分组成,共同协作实现文本输入功能。理解这些部分的职责对于有效使用和自定义 InputField 至关重要。

组件构成图

InputField 根节点
负责核心逻辑
处理输入事件与验证
Text Area
可视区域与裁剪
Placeholder
输入提示文本
Text
显示用户输入内容

📋 组件功能详解

组件部分功能描述核心职责必需性
InputField (根对象)控制中心处理输入事件、内容验证、光标控制✅ 必需
Text Area可视区域定义文本显示范围,提供裁剪功能✅ 必需
Placeholder占位提示显示输入提示文本(如"请输入…")⚠️ 可选但推荐
Text内容显示渲染用户实际输入的文字✅ 必需

🔧 各组件详细说明

1. InputField (根对象/控制器)

位置:根节点上的 InputFieldTMP_InputField 组件
在这里插入图片描述

功能

  • 接收和管理键盘/触摸输入
  • 处理文本验证(如限制字符类型)
  • 控制光标闪烁和文本选择
  • 管理组件状态(启用/禁用)

📋 InputField 组件的 Inspector 参数全览

1. 基础参数部分

参数类型默认值功能描述使用建议
Interactablebooltrue是否启用交互设置为 false 时,输入框将变为灰色且不可操作
Transition下拉菜单ColorTint状态过渡方式包含 None、ColorTint、SpriteSwap、Animation 四种方式
Navigation下拉菜单AutomaticUI 导航方式决定键盘/手柄在 UI 元素间的切换方式

2. 文本输入参数

参数类型默认值功能描述使用技巧
Textstring“”输入框的初始文本可预先设置默认值,但运行时修改会触发事件
Character Limitint0最大字符限制0 表示无限,设置后超过字符将无法输入
Content Type枚举Standard内容类型限制内置 9 种验证类型:
Standard, Integer, Decimal, AlphaNumeric, Name, Email, Password, Pin, Custom 具体下表
Line Type枚举SingleLine行类型限制SingleLine(单行), MultiLineSubmit(多行回车提交), MultiLineNewline(多行换行)
Input Type枚举Standard输入类型Standard(标准), AutoCorrect(自动修正), Password(密码)
Keyboard Type枚举Default键盘类型移动端专用:ASCIICapable, NumberPad, Email, 等

在这里插入图片描述

Content Type
验证类型允许字符键盘类型典型应用移动端优化
Standard所有字符默认键盘聊天、评论
Integer Number0-9, +, -数字键盘年龄、数量
Decimal Number0-9, ., +, -数字键盘(带小数点)价格、分数
AlphanumericA-Z, a-z, 0-9字母数字键盘用户名、密码
Name字母, 空格, ’ - .字母键盘姓名、昵称
Email Address字母数字 + @._-邮箱优化键盘邮箱地址
Password所有字符(显示为*)自适应键盘密码输入
Pin0-9(显示为●)数字键盘PIN码、验证码
Custom自定义规则(具体下表)默认键盘特殊需求⚠️ 需手动设置
Custom

在这里插入图片描述

📋 参数表
参数功能描述枚举值适用平台默认值
Line Type控制文本换行行为SingleLine, MultiLineSubmit, MultiLineNewline全平台SingleLine
Input Type控制输入方式和自动校正Standard, AutoCorrect, Password全平台Standard
Keyboard Type指定移动设备键盘类型Default, ASCIICapable, NumbersAndPunctuation, URL, NumberPad, PhonePad, NamePhonePad, EmailAddress, NintendoNetworkAccount, Social, Search, DecimalPad移动端Default
Character Validation字符级输入验证None, Integer, Decimal, Alphanumeric, Name, EmailAddress全平台None

📊 详细参数表
1. Line Type(行类型控制)
枚举值功能描述行为特点适用场景
SingleLine单行输入模式- 禁止换行符输入
- 回车键提交内容
- 文本水平滚动
用户名、搜索框、密码
MultiLineSubmit多行输入但回车提交- 允许换行符
- 回车键提交整个表单
- Ctrl+Enter 换行
聊天输入、评论框
MultiLineNewline多行输入且回车换行- 回车键插入换行符
- 需要特殊按键提交
- 完全自由的多行输入
长文本描述、文档编辑

代码示例

// 设置多行提交模式
inputField.lineType = InputField.LineType.MultiLineSubmit;
2. Input Type(输入类型控制)
枚举值功能描述平台特性安全考虑
Standard标准输入模式- 启用自动更正
- 启用输入预测
- 记录输入历史
可能泄露敏感信息
AutoCorrect自动校正模式- 增强的自动更正
- 更强的拼写检查
- 上下文感知建议
不适合专有名词
Password密码输入模式- 显示为星号或圆点
- 禁用自动更正
- 不记录输入历史
安全输入,防窥视

移动端特性

  • iOS:自动使用安全文本输入(secureTextEntry)
  • Android:自动禁用个性化学习
3. Keyboard Type(键盘类型控制)
枚举值键盘布局特殊键适用场景
Default系统默认键盘标准布局通用文本输入
ASCIICapableASCII 兼容键盘标准符号键编程相关输入
NumbersAndPunctuation数字和标点键盘数字+常用符号数值和公式输入
URLURL 优化键盘.com, /, 😕/网址输入
NumberPad纯数字键盘0-9, 小数点电话号码、PIN码
PhonePad电话键盘*、#、+电话号码输入
NamePhonePad姓名和电话混合字母+数字布局联系人信息
EmailAddress邮箱地址键盘@, .com, .org电子邮件输入
NintendoNetworkAccount任天堂账户键盘游戏相关符号游戏账号输入
Social社交媒体键盘@, #, 表情符号社交媒体输入
Search搜索优化键盘搜索图标, Go搜索框
DecimalPad小数数字键盘数字+小数点价格、测量值

平台支持差异

  • iOS:支持所有键盘类型
  • Android:部分键盘类型可能映射为系统最接近类型

4. Character Validation(字符验证)

枚举值验证规则允许字符排除字符
None无字符验证所有Unicode字符无过滤
Integer整数验证0-9, +, -所有非数字字符
Decimal小数验证0-9, ., +, -所有非数字和小数点
Alphanumeric字母数字验证A-Z, a-z, 0-9符号、空格、特殊字符
Name姓名格式验证字母, 空格, ', -, .数字、符号
EmailAddress邮箱格式验证字母, 数字, @, ., _, -, +空格、特殊符号

验证时机

  • 实时验证:输入时立即过滤非法字符
  • 失去焦点验证:部分平台在提交时进行额外验证

🛠️ 组合配置示例
1. 电子邮箱输入框
Line Type: SingleLine
Input Type: Standard
Keyboard Type: EmailAddress
Character Validation: EmailAddress

效果:移动端自动弹出@符号优先的键盘,实时过滤非法邮箱字符

2. 电话号码输入框
Line Type: SingleLine
Input Type: Standard
Keyboard Type: PhonePad
Character Validation: None

效果:弹出电话拨号键盘,但允许输入任何字符(因为有些电话号码包含分机号)

3. 多行地址输入
Line Type: MultiLineNewline
Input Type: AutoCorrect
Keyboard Type: Default
Character Validation: Name

效果:支持多行地址输入,启用自动校正,只允许字母和有限符号

4. 价格输入框
Line Type: SingleLine
Input Type: Standard
Keyboard Type: DecimalPad
Character Validation: Decimal

效果:弹出带小数点的数字键盘,确保只能输入有效数字格式

🔧 使用技巧

组合验证示例

// 创建自定义验证逻辑
public class CustomInputValidator : MonoBehaviour
{public InputField targetField;void Start(){targetField.characterValidation = InputField.CharacterValidation.None;targetField.onValueChanged.AddListener(CustomValidate);}void CustomValidate(string input){// 只允许字母和空格,最大长度20string filtered = new string(input.Where(c => char.IsLetter(c) || c == ' ').ToArray());if (filtered.Length > 20)filtered = filtered.Substring(0, 20);if (filtered != input)targetField.text = filtered;}
}

响应键盘类型变化

// 动态调整键盘类型基于平台
void SetupPlatformSpecificKeyboard()
{#if UNITY_IOSinputField.keyboardType = TouchScreenKeyboardType.ASCIICapable;#elif UNITY_ANDROIDinputField.keyboardType = TouchScreenKeyboardType.Default;#elseinputField.keyboardType = TouchScreenKeyboardType.NumberPad;#endif
}

通过深入理解这些参数及其组合,您可以创建高度定制化的输入体验,满足各种应用场景的需求。

3. 视觉样式参数

参数类型默认值功能描述效果说明
Caret Blink Ratefloat0.85光标闪烁速度单位:秒,0 表示不闪烁
Caret Widthint1光标宽度取值范围:1-15(像素)
Custom Caret Colorboolfalse是否自定义光标颜色勾选后出现 Caret Color 选项
Caret ColorColor#000000光标颜色仅当 Custom Caret Color 开启时有效
Selection ColorColor#A8A8FF80文本选中颜色RGBA(168,168,255,0.5)
Hide Mobile Inputboolfalse是否隐藏移动端输入框移动端专用,影响系统原生输入框显示

4. 子对象绑定

参数类型绑定对象关键作用
Text Component引用Text绑定实际显示用户输入的文本对象
Placeholder引用Placeholder绑定占位提示文本对象
Read Onlybool-是否只读

5. 高级文本处理

参数类型默认值功能描述注意事项
Rich Textboolfalse是否支持富文本启用后可使用 ,,等标签
Rich Text Editingboolfalse是否在编辑时显示富文本开启后编辑时仍可看到富文本效果
OnFocus Select Allboolfalse获得焦点时全选文本打开即生效
Reset On Deactivationbooltrue失去焦点时是否重置文本禁用时保留输入内容

6. 事件系统

事件参数类型触发时机典型用法
On Value Changed (String)string文本变化时触发实时搜索/过滤
On End Edit (String)string按下回车或失去焦点表单提交
On Value Changed (InputField)InputField文本变化时触发获取完整组件
On Select (BaseEventData)BaseEventData选中输入框时显示自定义键盘
On Deselect (BaseEventData)BaseEventData失去焦点时隐藏键盘

⚙️ TextMeshPro 特有参数(TMP_InputField)

当使用 TextMeshPro InputField 时,还会增加以下文本参数:

参数类型默认值功能描述优势
Point Sizefloat-字体大小覆盖全局设置
Font AssetTMP_FontAsset-字体资源支持 SDF 字体
On Focus Select Allboolfalse获得焦点时全选同标准 InputField
Global Point Sizefloat-全局字体大小所有选项统一
Custom Caret Colorboolfalse是否自定义光标-
Caret ColorColor#000000光标颜色-
Selection ColorColor#A8A8FF80选择颜色-
Restore Original Text On ESC Keybooltrue按 ESC 恢复原始文本非常有用的功能
Rich Textboolfalse富文本支持完整标签支持
Multi Lineboolfalse多行支持取代 Line Type
Reset On Deactivationbooltrue失去焦点重置-
Text ComponentTMP_Text-TMP 文本组件必需

💡 最佳实践配置建议

1. 登录表单配置

- Character Limit: 20
- Content Type: Alphanumeric
- Line Type: SingleLine
- Placeholder: "用户名"
- On End Edit: 提交表单

2. 密码输入框配置

- Character Limit: 32
- Content Type: Password
- Custom Caret Color: true
- Caret Color: #FFFFFF
- Hide Mobile Input: true (移动端)

3. 聊天输入框配置

- Line Type: MultiLineNewline
- Character Limit: 200
- Caret Blink Rate: 0.5
- Rich Text: true
- On Value Changed: 更新预览

4. 数字输入框配置

- Content Type: Integer Number
- Keyboard Type: NumberPad (移动端)
- Character Limit: 6
- Selection Color: #00FF007F

⚠️ 常见配置错误排查

问题现象可能原因解决方案
无法输入Interactable=false启用交互
输入字符被截断Character Limit 设置过小增大限制
密码不显示*Content Type 未设 Password设为密码类型
多行不起作用Line Type 仍为 SingleLine改为 MultiLineNewline
富文本显示无效Rich Text 未勾选勾选 Rich Text
光标不可见Caret Blink Rate=0调大闪烁速率

🎯 完整示例:创建带验证的邮箱输入框

using UnityEngine;
using UnityEngine.UI;
using TMPro;public class EmailInputField : MonoBehaviour
{public TMP_InputField emailInput;void Start(){emailInput.contentType = TMP_InputField.ContentType.EmailAddress;emailInput.characterLimit = 100;emailInput.onEndEdit.AddListener(ValidateEmail);emailInput.placeholder.GetComponent<TMP_Text>().text = "输入邮箱地址...";}private void ValidateEmail(string email){bool isValid = System.Text.RegularExpressions.Regex.IsMatch(email, @"^[^@\s]+@[^@\s]+\.[^@\s]+$");if(!isValid){emailInput.text = "";emailInput.Select();}}
}

2. Text Area (可视区域)

位置:通常名为 Text Area 的子对象,带有 Rect Mask 2D 组件

核心功能

  • 定义文本的显示边界
  • 裁剪超出范围的文本内容
  • 提供滚动视图支持

配置要点

// 获取Text Area的RectTransform
RectTransform textArea = mainInputField.transform.Find("Text Area").GetComponent<RectTransform>();
textArea.offsetMin = new Vector2(5, 5); // 设置内边距
textArea.offsetMax = new Vector2(-5, -5);

3. Placeholder (占位文本)

位置:通常名为 Placeholder 的子对象,带有 TextTMP_Text 组件

核心功能

  • 在输入框为空时显示提示文本
  • 用户开始输入时自动隐藏
  • 提供视觉引导,改善用户体验

常见配置

// 修改占位文本
Text placeholderText = mainInputField.placeholder.GetComponent<Text>();
placeholderText.text = "请输入用户名...";
placeholderText.color = new Color(0.5f, 0.5f, 0.5f, 0.5f); // 半透明灰色

4. Text (文本显示)

位置:通常名为 Text 的子对象,带有 TextTMP_Text 组件

核心功能

  • 显示用户实际输入的内容
  • 支持富文本格式(如果使用TMP)
  • 响应字体、大小、颜色等样式变化

代码访问示例

// 获取和修改输入文本
string userInput = mainInputField.text;
mainInputField.text = "默认值";// 监听文本变化
mainInputField.onValueChanged.AddListener(OnInputValueChanged);void OnInputValueChanged(string newValue)
{Debug.Log("输入内容: " + newValue);
}

⚙️ 创建与配置流程

标准创建步骤

  1. 右键 Hierarchy → UI → Input FieldInput Field - TextMeshPro
  2. Unity 自动生成完整结构:
    InputField
    ├── Text Area (带RectMask2D)
    │   └── Text (或TextMeshPro文本)
    └── Placeholder (可选)
    

重要配置建议

  1. 文本组件选择

    • 普通 InputField:使用标准 Text 组件
    • TMP_InputField:使用 TextMeshPro - Text,支持更佳渲染效果
  2. 布局适配

    // 确保Text Area正确设置锚点
    RectTransform textArea = mainInputField.textComponent.GetComponent<RectTransform>();
    textArea.anchorMin = Vector2.zero;
    textArea.anchorMax = Vector2.one;
    textArea.offsetMin = new Vector2(5, 5);
    textArea.offsetMax = new Vector2(-5, -5);
    
  3. 移动端优化

    // 调整移动端输入体验
    mainInputField.shouldHideMobileInput = false; // 是否隐藏原生键盘
    mainInputField.inputType = InputField.InputType.Standard;
    

🎨 自定义与样式调整

修改视觉样式

// 自定义输入框外观
Image backgroundImage = mainInputField.GetComponent<Image>();
backgroundImage.sprite = customSprite;
backgroundImage.color = Color.white;// 修改文本样式
TMP_Text textComponent = mainInputField.textComponent;
textComponent.fontSize = 24;
textComponent.color = Color.black;
textComponent.font = customFontAsset;

添加特殊功能

// 实现密码输入框
mainInputField.contentType = InputField.ContentType.Password;
mainInputField.characterLimit = 20;// 添加实时验证
mainInputField.onValueChanged.AddListener(ValidateInput);void ValidateInput(string input)
{if (input.Contains(" ")){mainInputField.text = input.Replace(" ", "");}
}

⚠️ 常见问题与解决方案

问题原因解决方案
输入文本不显示Text组件未正确绑定检查InputField的Text属性是否指向正确的Text对象
占位符不消失Placeholder未正确设置确保InputField的Placeholder属性指向正确的对象
文本显示不全Text Area裁剪区域过小调整Text Area的RectTransform尺寸
移动端无法输入移动输入设置错误检查shouldHideMobileInput和inputType设置

💡 使用技巧与最佳实践

  1. 性能优化

    • 对频繁更新的输入框使用对象池
    • 避免在onValueChanged中执行重操作
  2. 用户体验

    // 自动聚焦
    public void AutoFocusInputField()
    {mainInputField.ActivateInputField();mainInputField.Select();
    }// 回车键提交
    void Update()
    {if (Input.GetKeyDown(KeyCode.Return) && mainInputField.isFocused){SubmitForm();}
    }
    
  3. 多平台适配

    #if UNITY_IOS || UNITY_ANDROID
    mainInputField.shouldHideMobileInput = true;
    #else
    mainInputField.shouldHideMobileInput = false;
    #endif
    

文章转载自:

http://ns7AnvoF.fxmnh.cn
http://A04UW51r.fxmnh.cn
http://dXq9Nqlc.fxmnh.cn
http://4QO4ns3s.fxmnh.cn
http://QFHB2GhT.fxmnh.cn
http://pcv9JtTu.fxmnh.cn
http://Wk9rLuox.fxmnh.cn
http://UpgSO0zh.fxmnh.cn
http://ueyumMT5.fxmnh.cn
http://k3nz2YMf.fxmnh.cn
http://FybU3mlI.fxmnh.cn
http://axUF697W.fxmnh.cn
http://IFJPqm08.fxmnh.cn
http://9SYYYtOF.fxmnh.cn
http://2ZIgbN7y.fxmnh.cn
http://ZxL7FUqY.fxmnh.cn
http://nlZfxXuv.fxmnh.cn
http://npLzP4vh.fxmnh.cn
http://B7y5P6jB.fxmnh.cn
http://eN84Efks.fxmnh.cn
http://WuA88n5q.fxmnh.cn
http://Rk3kXTlg.fxmnh.cn
http://coIIndF0.fxmnh.cn
http://NrvHdWkD.fxmnh.cn
http://1GXmHgbx.fxmnh.cn
http://nfJcuKMG.fxmnh.cn
http://vODlXzbr.fxmnh.cn
http://q9QEXDzq.fxmnh.cn
http://vhUQmLOx.fxmnh.cn
http://hhc26NXr.fxmnh.cn
http://www.dtcms.com/a/379766.html

相关文章:

  • 基于QVTKOpenGLNativeWidget的三维点云可视化实现
  • Qwen3 中注意力机制实现
  • 基于librdkafa C++客户端生产者发送数据失败问题处理#2
  • Maya绑定:渲染编辑器Hypershade简单使用,给小球添加材质纹理
  • 前端基础 —— A / HTML
  • 线性代数 | 行列式与矩阵区别
  • Redis 核心数据结构:String 类型深度解析与 C++ 实战
  • 【Linux】面试常考!Linux 进程核心考点:写时拷贝优化原理 + 进程等待实战,一篇理清进程一生
  • 根据当前门店经纬度,求出1km内的门店
  • java类冲突
  • 线上的Python服务如何部署?
  • ​​Cinema 4D 2026 核心亮点:AI智能驱动 + 无缝实时渲染​
  • 【Pywinauto库】10.7 pywinauto.controls.uia_controls控件
  • Next.js 字体优化:使用 `next/font` 告别布局偏移和性能瓶颈
  • 腾讯滑块---Js逆向酷狗音乐登入
  • 机器学习算法概述
  • zzz‘sJavaweb知识点总结
  • 【STL源码剖析】二叉世界的平衡:从BST 到 AVL-tree 和 RB-tree 的插入逻辑
  • Altium Designer使用精通教程 第四章(PCB封装库绘制)
  • 基于多模态与主动学习的车船飞机图像识别系统研究与应用技术方案
  • cesium的3dtiles模型矫正工具
  • Win7环境中离线安装Visual Studio 2017的相关问题
  • 解决 Typora 0.11.18 版本过期问题
  • 基于R语言机器学习方法在生态经济学领域中的实践技术应用;十大原理、熵权法、随机森林、神经网络、因果推断全解析
  • 数据结构:并查集
  • Unity Addressable System 本地服务器功能验证
  • 用简单的日期类巩固C++类与对象基本知识
  • python+springboot+uniapp微信小程序题库系统 在线答题 题目分类 错题本管理 学习记录查询系统
  • DeepSeek v3.1和DeepSeek R1在编程风格方面的区别
  • kafka启动小脚本