zoukankan      html  css  js  c++  java
  • unity inputfield 过滤emoji输入

    unity版本:unity2017.1.5f1

    复现步骤:InputField在安卓手机InputField连续输入两个emoji会报错

    报错内容:

    2020-01-08 19:56:38.366 22894-22931/? E/Unity: ArgumentOutOfRangeException: Argument is out of range.
        Parameter name: index
          at System.Collections.Generic.List`1[UnityEngine.UICharInfo].get_Item (Int32 index) [0x00000] in <filename unknown>:0 
          at UnityEngine.UI.InputField.SetDrawRangeToContainCaretPosition (Int32 caretPos) [0x00000] in <filename unknown>:0 
          at UnityEngine.UI.InputField.UpdateLabel () [0x00000] in <filename unknown>:0 
          at UnityEngine.UI.InputField.SendOnValueChangedAndUpdateLabel () [0x00000] in <filename unknown>:0 
          at UnityEngine.UI.InputField.LateUpdate () [0x00000] in <filename unknown>:0 
         
        (Filename:  Line: -1)
    

      看报错 可看出是一个长度越界的错,结合代码内容和bug复现,发现报错总是发生在输入两个emoji时,也就是在输入时获取字符长度报错。

    查阅资料,发现在ios上不会出现这样的问题

    https://unity3d.com/unity/qa/patch-releases/5.3.4p1?_ga=2.154473848.1772582649.1578484654-1798539839.1575364585

    iOS: Added a compile flag in the trampoline code in order to allow the user to disable the filtering of emoji characters.

    因此只需要处理安卓的即可

    参考了几位大佬的总结:

    Unity之输入框屏蔽Emoji表情

    各种字符的unicode区间

    结合官方给的

    Emoji Unicode Tables

    字符类

    总结一下,就是过滤掉emoji的输入

    方法:通过监听InputField的输入,获取当前输入字符串内容,通过正则匹配,发现有emoji,直接替换为空字符串

    达到过滤emoji输入的功能。

    核心代码如下:

            List<string> patten = new List<string>() { @"p{Cs}", @"p{Co}", @"p{Cn}", @"[u2702-u27B0]" };
    
            private string FilterEmoji(string str)
            {
                for (int i = 0; i < patten.Count; i++)
                {
                    str = Regex.Replace(str, patten[i], "");//屏蔽emoji   
                }
                return str;
            }

    这里屏蔽了绝大多数emoji 可根据自己需求放宽匹配规则。

  • 相关阅读:
    Git笔记
    Android笔记
    个人人生警示
    Java 注解
    JAVA面试题
    kotlin学习笔记
    Android Studio之gradle和gradle插件
    gcc在Linux下编译so文件出错 jni.h: no such file or directory
    apktool新官网地址
    Vim 使用记录
  • 原文地址:https://www.cnblogs.com/unityzc/p/12179505.html
Copyright © 2011-2022 走看看