其实其他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