iphoneX 屏幕适配 NGUI

其实其他UGui也是一样的 (也可以在界面Panel下做一个Widget来做停靠父物体,改Widget大小)

1,首先要知道怎么判断是不是iphoneX平台
通过SystemInfo.deviceModel获取设备型号,获取的值是形如:iPhone8,1这种。这里有个表:
iPhone7,1         iPhone 6 Plus
iPhone7,2         iPhone 6
iPhone8,1         iPhone 6s
iPhone8,2        iPhone 6s Plus
iPhone8,4        iPhone SE


iPhone9,1         国行、日版、港行iPhone 7 (A1660/A1779/A1780)
iPhone9,2        港行、国行iPhone 7 Plus (A1661/A1785/A1786)
iPhone9,3        美版、台版iPhone 7 (A1778)
iPhone9,4        美版、台版iPhone 7 Plus (A1784)


iPhone10,1       国行(A1863)、日行(A1906)iPhone 8
iPhone10,4      美版(Global/A1905)iPhone 8
iPhone10,2      国行(A1864)、日行(A1898)iPhone 8 Plus
iPhone10,5      美版(Global/A1897)iPhone 8 Plus
iPhone10,3  国行(A1865)、日行(A1902)iPhone X
iPhone10,6  美版(Global/A1901)iPhone X


---或者 高版本可以用
var isIphoneX = UnityEngine.iOS.Device.generation;  
if (isIphoneX == UnityEngine.iOS.DeviceGeneration.iPhoneX)  
{  
Debug.log("这个是iphoneX平台")  
}   


2.设置 PanelClipping 为SoftClip
3.代码设置 在创建窗口的公共类调用
 /// <summary>
    /// 判断是否为Iphone
    /// </summary>
    /// <returns></returns>
    public static bool GetIsIphoneX()
    {
#if UNITY_IPHONE
        if (SystemInfo.deviceModel.Equals("Iphone10,3") || SystemInfo.deviceModel.Equals("Iphone10,6"))
        {
            Debug.Log("The Device Is IphoneX");
            return true;
        }
#endif
        return false;
    }


    /// <summary>
    /// 更改适配IphoneX值
    /// </summary>
    /// <param name="obj"></param>
    public static void SetClippingOffsetValue(GameObject obj,float x, float y)
    {
        UIPanel panel = obj.GetComponent<UIPanel>();
        if (panel && panel.clipping == UIDrawCall.Clipping.SoftClip)
        {
            panel.baseClipRegion = new Vector4(0, 0, x, y);// 这里改的是z,w值
            Debug.LogError("IphoneX 适配成功");
        }
    }
4:针对有背景的全屏界面 在UIRoot下创建一个Texture 在需要改变的界面打开时 隐藏当前的texture
(去一个固定的名字方便隐藏) 打开UIRoot下的texture并赋值,在关闭界面时,关闭uiRoot下的texture

        CS.ShowObject(self:FindChild('ToHide'), false);
        local _texture = bg.transform:GetComponent('UITexture').mainTexture;
        if _texture then
            UiMgr:ShowBgTexture(_texture);
        end
5:主面板panel 设置了softclip 后下面的列表会出现刷新问题(刷新不出来)和有的透明ui不能改透明度
在加载完界面后再还原panel到原来的模式 (ui停靠方式用Start)
 local _panel = self._wnd:GetComponent('UIPanel')
 if _panel then
     _panel.clipping = UIDrawCall.Clipping.None
 end

猜你喜欢

转载自blog.csdn.net/qq_30585525/article/details/79559328
今日推荐