首页 > 其他分享 >Unity,发布ios和Android的包,UGUI,异形屏适配问题。

Unity,发布ios和Android的包,UGUI,异形屏适配问题。

时间:2023-05-29 20:01:00浏览次数:36  
标签:anPos 适配 Screen float ios Unity ui rect

Unity,发布ios和Android的包,UGUI,异形屏适配问题。

@TOC

<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">

前言

unity发布移动端需要做ui的适配,我们用的是UGUI,暂且提供一种我们自己的ui适配解决方案,包含异形屏的。

<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">

一、区分Android手机,Android平板,Iphone,Ipad

也查到了各种各样的区分方法。 我们是通过长宽比来区分的,下面直接上代码。

#if UNITY_ANDROID

        //通过屏幕比例判断是否刘海屏
        if ((float)Screen.width / Screen.height > 2)
        {
            isHaveLiuhai = true;
        }
        if ((float)Screen.width / Screen.height < 1.7f)
        {
        //是安卓平板
            isIphone = false;
        }
        else
        {
        //是安卓手机
            isIphone = true;

        }
#endif
#if UNITY_IOS
        
        //通过屏幕比例判断是否刘海屏
        if ((float)Screen.width / Screen.height > 2)
        {
            isHaveLiuhai = true;
        }
        if ((float)Screen.width / Screen.height < 1.5f)
        {
        //是Ipad
            isIphone = false;
        }
        else
        {
        //是Iphone
            isIphone = true;

        }
#endif

二、UGUI的适配

1.Canvas设置

这是canvas的相关设置

Unity,发布ios和Android的包,UGUI,异形屏适配问题。_#if

2.相应的ui缩进,来适应异形屏

设置ui缩进的代码如下(示例):

//设置节点的位置
    public void SetAdapta(Transform target, float x)
    {
#if UNITY_IPHONE
        if (isHaveLiuhai)
        {
            RectTransform rect = target.GetComponent<RectTransform>();
            Vector2 anPos = rect.anchoredPosition;
            anPos.x += x;
            rect.anchoredPosition = anPos;
        }
#endif
#if UNITY_ANDROID
        if (isHaveLiuhai)
        {
            RectTransform rect = target.GetComponent<RectTransform>();
            Vector2 anPos = rect.anchoredPosition;
            anPos.x += x;
            rect.anchoredPosition = anPos;
        }
#endif
    }

这是调用的代码

IPhoneAdapta.Instance.SetAdapta(scanButton.transform, -144);

表示右侧的ui向左缩进144,左侧ui向右缩进的话,把负值变为正值即可。


标签:anPos,适配,Screen,float,ios,Unity,ui,rect
From: https://blog.51cto.com/u_16023649/6373744

相关文章

  • IOS学习-UILabel
    自己学习用5个常用属性(1)font属性:设置显示文本的字体(2)size属性:设置显示文本的字体(3)backgroundColor属性:设置背景颜色UITextAlignmentLeftUITextAlignmentCenterUITextAlignmentRight(4)textColor:设置文本的颜色(5)adjustFontSizeToFitWidth:设置YES,表示文本自适应大......
  • IOS学习-UIButton
    常用的属性UIButtonTypeUIButtonTypeCustomUIButtonTypeRounedRect一个圆角矩形样式的按钮UIButtonTypeDetailDisclosure一个详细纰漏按钮UIButtonTypeInfoLight一个信息按钮,有一个浅色背景UIButtonTypeInfoDark一个信息按钮,有一个黑暗的背景UIButtonTypeContactAdd一个联系人......
  • IOS学习-UITextView
    《iOS8开发指南》,自己总结用UITextView文本视图(UITextView)与文本框类似,差别在于文本视图可显示一个可滚动和编辑的文本块,供用户阅读或修改。仅当需要的的输入很多时,才应使用文本视图。AttributeInspector分为3部分(TextField,control,view)(1)Text:设置文本框的默认文本(2)......
  • Musl libc 库成功适配到 openEuler Embedded,推动欧拉嵌入式生态发展
    近期,RISC-VSIG在欧拉嵌入式操作系统上成功实现了musllibc的适配,完成了使用musllibc库替换glibc库构建镜像的工作。目前,以musllibc为基础库编译的镜像已在RaspberryPi4开发板上可用,这一成果推动了openEulerEmbedded的多态发展。编译镜像步骤说明:https://openeule......
  • axios 或 @nestjs/axios 错误地应用 npm config proxy
    npmproxy$npmconfiggetproxyhttp://127.0.0.1:25378/如果你的npm设置了如上代理,那么当请求本地服务时,应该会出现代理错误(通常是502响应):import{HttpService}from'@nestjs/axios';@Injectable()exportclassForwardService{@Inject()privatereadonlyhtt......
  • Unity的AssetPostprocessor之Model:深入解析与实用案例 1
    UnityAssetPostprocessor模型相关函数详解在Unity中,AssetPostprocessor是一个非常有用的工具,它可以在导入资源时自动执行一些操作。在本文中,我们将重点介绍AssetPostprocessor中与模型相关的函数,并提供多个使用例子。OnPostprocessModelOnPostprocessModel是AssetPostprocessor......
  • Unity的Undo:详解解析与实用案例
    UnityUndo详解在Unity中,Undo是一个非常重要的功能,它可以让开发者在编辑器中进行操作时,随时撤销之前的操作,从而避免不必要的错误。本文将详细介绍UnityUndo实现原理和使用方法,并提供多个使用例子,帮助开发者更好地理解和应用该功能。实现原理UnityUndo的实现原理是通过记录每个......
  • Unity的Console的控制类LogEntries:深入解析与实用案例
    使用UnityConsole窗口的LogEntries私有类实现自定义日志系统在Unity开发过程中,我们经常需要使用Console窗口来查看程序运行时的日志信息。Unity内置的日志系统提供了基本的日志功能,但有时我们需要更多的自定义选项。本文将介绍如何使用UnityConsole窗口的LogEntries私有类来实现......
  • Unity的Undo:详解解析与实用案例
    UnityUndo详解在Unity中,Undo是一个非常重要的功能,它可以让开发者在编辑器中进行操作时,随时撤销之前的操作,从而避免不必要的错误。本文将详细介绍UnityUndo实现原理和使用方法,并提供多个使用例子,帮助开发者更好地理解和应用该功能。实现原理UnityUndo的实现原理是通过记录每个......
  • unity学习日志5(麦扣老师3DRPG项目学习)
    设计模式单例模式(泛型单例)作用:提高代码复用率,增加代码可读性//实现泛型单例,并对T进行约束,规定只有各类manager使用单例模式publicclassSingleton<T>:MonoBehaviourwhereT:Singleton<T>{privatestaticTinstance;//通过属性来访问直接获取私有的静......