zoukankan      html  css  js  c++  java
  • UnityiOS键盘无法输入Emoji

    问题

    在TextMeshPro出现之前,Unity是不支持emoji的,所以导出的包是把emoji过滤掉的,在导出工程的Keyboard.mm中。但是emoji却是大多游戏的刚需,所以很多游戏自己实现了文本组件支持emoji。但这还不够,要把Unity在原生层对emoji的过滤去掉。

    #ifndef FILTER_EMOJIS_IOS_KEYBOARD
    #define FILTER_EMOJIS_IOS_KEYBOARD 1
    #endif
    

    解决

    2017版本中,在导出工程流程中,添加预定义宏就行。

    static void OnPostprocessBuild(BuildTarget target, string pathToBuildProject){
        string projPath = PBXProject.GetPBXProjectPath(pathToBuildProject);
        PBXProject pbxProj = new PBXProject ();
        pbxProj.ReadFromString (File.ReadAllText (projPath));
        string target = pbxProj.TargetGuidByName ("Unity-iPhone");
        if (!string.IsNullOrEmpty (target)) {
            pbxProj.SetBuildProperty (target, "GCC_PREPROCESSOR_DEFINITIONS", "FILTER_EMOJIS_IOS_KEYBOARD=0");//关闭ios emoji过滤
        }
    }
    

    但在2020版本中,这个设置却没用了。于是想到TMP应该也要处理一样的问题,于是找到Unity TMP的源码,抄了一波。其实就是导出工程以后,直接覆写Keyboard.mm过滤emoji的宏。源码在项目根目录\Library\PackageCache\com.unity.textmeshpro@3.0.6\Scripts\Editor\TMP_PostBuildProcessHandler.cs

    using UnityEngine;
    using UnityEditor;
    using UnityEditor.Callbacks;
    using System.IO;
    
    
    namespace TMPro
    {
        public class TMP_PostBuildProcessHandler
        {
            [PostProcessBuildAttribute(10000)]
            public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject)
            {
                if (target == BuildTarget.iOS)
                {
                    // Try loading the TMP Settings
                    TMP_Settings settings = Resources.Load<TMP_Settings>("TMP Settings");
    
                    if (settings == null)
                        return;
    
                    string file = Path.Combine(pathToBuiltProject, "Classes/UI/Keyboard.mm");
                    string content = File.ReadAllText(file);
                    content = content.Replace("FILTER_EMOJIS_IOS_KEYBOARD 1", "FILTER_EMOJIS_IOS_KEYBOARD 0");
                    File.WriteAllText(file, content);
                }
            }
        }
    }
    
  • 相关阅读:
    简单网络问题排查记录一
    安装mysql_sniffer报错undefined reference to symbol 'pthread_setspecific@@GLIBC_2.2.5'问题
    tengine安装ngx_http_lua_module
    Django——URL详解/Django中URL是如何与urls文件匹配的
    Python学习——enumerate
    Python学习——装饰器/decorator/语法糖
    缓存优化
    页面重绘 回流及其优化
    window.getComputedStyle()方法的使用及其扩展
    java 三个循环的优缺点
  • 原文地址:https://www.cnblogs.com/nickcan/p/15797746.html
Copyright © 2011-2022 走看看