UIInput按字节长度限制输入
(汉字算2个字节,数字字母算1个字节)
如果需要限制20个汉字,就需要在页面上配置限制40个字符了。
而数字、字母等都是1个算一个字节,而汉字等算2个字节。
-
方法一:在UIInput中进行修改
①增加下面的方法
protected int GetStringByteLength(string str) { byte[] bytestr = System.Text.Encoding.Default.GetBytes(str); return bytestr.Length; }
②修改下面的方法
public string Validate(string val) { if (string.IsNullOrEmpty(val)) return ""; StringBuilder sb = new StringBuilder(val.Length); for (int i = 0; i 0 && this.GetStringByteLength(val) >= characterLimit) { do { val = val.Substring(0, val.Length - 1); } while (this.GetStringByteLength(val) > characterLimit); } return val; }
③修改下面的方法
protected virtual void Insert(string text) { string left = GetLeftText(); string right = GetRightText(); int rl = right.Length; StringBuilder sb = new StringBuilder(left.Length + right.Length + text.Length); sb.Append(left); // Append the new text for (int i = 0, imax = text.Length; i < imax; ++i) { // Can't go past the character limit if (characterLimit > 0 && this.GetStringByteLength(sb.ToString()) + this.GetStringByteLength(right) >= characterLimit) break; // If we have an input validator, validate the input first char c = text[i]; if (onValidate != null) c = onValidate(sb.ToString(), sb.Length, c); else if (validation != Validation.None) c = Validate(sb.ToString(), sb.Length, c); // Append the character if it hasn't been invalidated if (c != 0) sb.Append(c); } // Advance the selection mSelectionStart = sb.Length; mSelectionEnd = mSelectionStart; // Append the text that follows it, ensuring that it's also validated after the inserted value for (int i = 0, imax = right.Length; i < imax; ++i) { char c = right[i]; if (onValidate != null) c = onValidate(sb.ToString(), sb.Length, c); else if (validation != Validation.None) c = Validate(sb.ToString(), sb.Length, c); if (c != 0) sb.Append(c); } mValue = sb.ToString(); UpdateLabel(); ExecuteOnChange(); }
- 方法二:在上层逻辑中实现(推荐此方法)
//下面的事件监听放入合适的方法中 调用 EventDelegate.Add(this.mInput.onChange, this.OnInputChange); private void OnInputChange() { string str = this.mInput.value; if (characterLimit > 0 && this.GetStringByteLength(str) > characterLimit) { do { str = str.Substring(0, str.Length - 1); } while (this.GetStringByteLength(str) > characterLimit); this.mInput.value = str; } } private int GetStringByteLength(string str) { byte[] bytestr = System.Text.Encoding.Default.GetBytes(str); return bytestr.Length; }
相关推荐
NGUI 粒子效果与特效 无法正常显示解决方案
NGUI实现Tab键切换Input焦点,通过挂载脚本到父节点上,进行自动切换
NGUI右键关闭(销毁)当前窗口,用于Unity游戏关闭当前窗口
利用Ngui实现虚拟摇杆操作,流畅的单摇杆操作
网上没找到NGUI按钮持续响应的解决办法,就自己试着写了一个,亲测可用,语言为c#,本人只为得点积分,请不要随意上传,谢谢合作。
总结来说,NGUI是Unity3D中实现高质量UI界面的强大工具,涵盖了UI布局、动画、事件处理、输入管理等多个方面的知识。开发者在使用NGUI进行UI开发时,需要掌握如何高效地管理图集、如何设置按钮和事件监听、如何利用...
5. **多语言支持**:通过UIInput和UILabel,可以轻松实现多语言切换。 四、实战应用 在实际项目中,NGUI2.0常用于创建菜单系统、角色信息面板、游戏提示等。例如,开发者可以通过设置UIGrid和UILabel快速构建一个...
2. **事件处理**:通过使用 Event System 和 Widget 的交互,NGUI 支持点击、滑动等各种用户交互,让开发者能够轻松处理用户输入。 3. **图集和精灵管理**:NGUI 自带图集(Atlas)功能,允许将多个图像合并到一张...
《NGUI 3.6.4:打造高效Unity3D移动界面的利器》 NGUI,全称为Next-Gen UI,是Unity3D游戏引擎中的一款广泛应用的界面系统插件,尤其在移动游戏开发领域备受青睐。其3.6.4版本作为官方发布的最新版,不仅集成了之前...
使用NGUI获取监听按钮等各种信息,本人经过最新整理和分析现有的网络资源,这个方法是最适用,也是最简单的一种。
多个版本 NGUI Next-Gen UI是一款功能强大、灵活性高的UI插件,是当前最新版本的NGUI插件。它可以覆盖Unity的多个版本,包括Unity 5、...开发者可以使用Tween动画或使用代码编写动画逻辑,实现更加复杂的UI动画效果。
【NGUI版的虚拟摇杆】是Unity3D游戏开发中的一个组件,它主要用于实现触屏设备上的游戏控制,提供类似传统游戏手柄的虚拟操作方式。在移动平台上,由于物理按键的缺失,虚拟摇杆成为了游戏操控的主要手段。NGUI...
10. **触摸支持**:对于移动平台,NGUI支持触摸操作,能够很好地适应不同设备的屏幕尺寸和输入方式。 虽然Unity在后续版本中引入了新的Unity UI系统(UGUI),但NGUI仍然在许多项目中被使用,特别是在处理复杂交互...
NGUI离线文档是针对Unity游戏开发中NGUI框架的一个详细参考资料,主要基于3.7.5版本。NGUI是一个用户界面系统,专为Unity3D设计,它提供了丰富的UI组件和工具,使得开发者能够在2D和3D环境中创建出交互性强、视觉...
在资源管理方面,NGUI支持UI对象的按需加载和卸载,这在处理大量UI元素时尤为重要,能有效减少内存占用,提高游戏性能。同时,NGUI的事件系统允许组件之间通过消息进行通信,简化了多组件协同工作的编程难度。 NGUI...
《NGUI 3.0.0工具手册》是专为Unity开发者设计的一份详细指南,主要涵盖NGUI这一用户界面系统的新版本3.0.0的相关知识。NGUI是一款强大的UI解决方案,它允许开发者在Unity引擎中创建复杂、高性能且交互性强的用户...
4. **事件系统**:NGUI 自带事件系统,用户点击或交互时,可以通过脚本处理相应事件,实现与游戏逻辑的联动。 5. **性能优化**:NGUI 在3.11.2版本中继续优化了渲染效率,减少CPU和GPU的负担,尤其在处理大量UI元素...
《NGUI v3.12.1:2018年Unity UI系统深度解析》 NGUI,全称为Next-Gen UI,是一款专为Unity引擎设计的用户界面系统。在2018年,它发布了v3.12.1的最新版本,此更新旨在优化用户体验,提升性能,并增加新功能。作为...
考虑到移动设备的性能限制,NGUI特别优化了触摸输入和手势识别,使开发者能轻松创建适应手机和平板设备的触控界面。 **8. 2D物理支持** NGUI还集成了2D物理系统,允许UI元素参与物理运算,例如碰撞检测,这对于创建...
本文将详细探讨如何利用ToLua框架实现NGUI的热更新,帮助开发者更高效地进行游戏维护和升级。 ToLua是针对Unity引擎的一个开源的Lua绑定库,它允许开发者使用Lua脚本语言来编写Unity的游戏逻辑,从而提高开发效率并...