美文网首页
Unity2017.3.1f1 误操作>=iPhoneX 上滑h

Unity2017.3.1f1 误操作>=iPhoneX 上滑h

作者: unlockc | 来源:发表于2019-03-09 17:08 被阅读0次

    解决方案:第一次上滑home虚拟条手机颤抖颜色加深(反馈用户:如果短时间内你再上滑一次,就退出游戏了);(满足前面括号要求的)第二次上滑home虚拟条,才退出游戏。

    要达到这个目的,只需要 把/Classes/UI/UnityViewControllerBase+iOS.mm里下图的代码

    //图一
    - (UIRectEdge)preferredScreenEdgesDeferringSystemGestures
    {
        UIRectEdge res = UIRectEdgeNone;
        if (UnityGetDeferSystemGesturesTopEdge())
            res |= UIRectEdgeTop;
        if (UnityGetDeferSystemGesturesBottomEdge())
            res |= UIRectEdgeBottom;
        if (UnityGetDeferSystemGesturesLeftEdge())
            res |= UIRectEdgeLeft;
        if (UnityGetDeferSystemGesturesRightEdge())
            res |= UIRectEdgeRight;
        return res;
    }
    

    替换为下图的代码

    //图二
    - (UIRectEdge)preferredScreenEdgesDeferringSystemGestures
    {
        return UIRectEdgeAll;
    }
    

    如果每次(Replace)Build Xcode工程后,都需要去Xcode工程/Classes/UI/UnityViewControllerBase+iOS.mm手动替换代码,就很麻烦。下面我给大家写了一个类,Build Xcode工程时自动替换代码:

    #if UNITY_IOS
    using UnityEngine;
    using UnityEditor.Callbacks;
    using UnityEditor;
    using UnityEditor.iOS.Xcode;
    using System.IO;
    using System.Text.RegularExpressions;
    
    public class XCodeProjectMod : MonoBehaviour {
    
        [PostProcessBuild]
        public  static  void OnPostprocessBuild (BuildTarget BuildTarget, string path) {
            if (BuildTarget == BuildTarget.iOS) {
                string viewControllerBasePath = path + "/Classes/UI/UnityViewControllerBase+iOS.mm";
                if (File.Exists(viewControllerBasePath)) {
                    string viewControllerBaseString = File.ReadAllText(viewControllerBasePath);
    
                    //图一代码替换图二代码的正则表达式。 \S 匹配任何非空白字符。等价于[^ \f\n\r\t\v]。
                    viewControllerBaseString = System.Text.RegularExpressions.Regex.Replace(viewControllerBaseString, @"- \(UIRectEdge\)preferredScreenEdgesDeferringSystemGestures\n{\n[\s\S]*?}", "- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures\n{\n    return UIRectEdgeAll; \n}");//+?最短匹配
    
                    File.WriteAllText(viewControllerBasePath, viewControllerBaseString);
                    } else {
                        Debug.LogError(viewControllerBasePath + " Can not find");
    
                    }
            }
        }
    
    }
    #endif
    

    任何问题都可以联系:chasingtomoro@qq.com

    相关文章

      网友评论

          本文标题:Unity2017.3.1f1 误操作>=iPhoneX 上滑h

          本文链接:https://www.haomeiwen.com/subject/ekqepqtx.html