【Unity】工具类系列——UI刘海屏适配

这篇具有很好参考价值的文章主要介绍了【Unity】工具类系列——UI刘海屏适配。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

刘海屏适配
项目上线了总免不了适配问题,
注:该方案支持热更适配,哪怕是上线项目也可以及时开启适配及调整适配程度。
原理:
通过获取设备型号及计算屏幕分辨率,在根据是否刘海屏调整侧边按钮的 Anchored Position 偏移量,从而避过刘海遮挡。


```csharp
using System;
using System.Collections;
using System.Collections.Generic;
using Sirenix.OdinInspector;
#if UNITY_EDITOR
using Sirenix.Utilities.Editor;
using UnityEditor;
#endif
using UnityEngine;

[ExecuteAlways]
public class UI_NotchAdapter : MonoBehaviour
{
    public enum AdapterType
    {
        ePosY_Minus_AdaptY,
        eOffsetMaxY_Minus_AdaptY,
        eSizeDeltaY_Set_AdaptY,
        eSizeDeltaY_Minus_AdaptY,
    }

    [System.Serializable]
    public class UI_NA_Data
    {
        [LabelText("需要适配的UI对象")]
        public RectTransform mRectTransform_;
        [LabelText("适配方式")]
        public AdapterType mAdapterType_;
    }
    [ListDrawerSettings(ShowIndexLabels = true, Expanded = true), LabelText("屏幕适配数据"), ShowInInspector]
    public List<UI_NA_Data> mAdaptDatas_ = new List<UI_NA_Data>();

    private void Awake()
    {
    }

    private void OnDestroy()
    {

    }


 
    void DoAdapterLogic(bool preview = false)
    {
        if (mAdaptDatas_ != null)
        {
            for (var i = 0; i < mAdaptDatas_.Count; ++i)
            {
                var data = mAdaptDatas_[i];
                if (data != null)
                {
                    GameManager gm = null;
                    if (!preview)
                        gm = GameManager.Instance;
                    switch (data.mAdapterType_)
                    {
                        case AdapterType.ePosY_Minus_AdaptY:
                            {
                                if (data.mRectTransform_ != null)
                                {
                                    var mPos = data.mRectTransform_.transform.localPosition;               
                                    data.mRectTransform_.transform.localPosition = new Vector3(mPos.x, mPos.y - gm.MNotchAdaptY_, mPos.z);
                                }
                            }
                            break;
                        case AdapterType.eSizeDeltaY_Minus_AdaptY:
                            {
                                if (data.mRectTransform_ != null)
                                {
                                    var rSize = data.mRectTransform_.sizeDelta;
                                        data.mRectTransform_.sizeDelta = new Vector2(rSize.x, rSize.y - gm.MNotchAdaptY_);

                                }
                            }
                            break;
                        case AdapterType.eSizeDeltaY_Set_AdaptY:
                            {
                                if (data.mRectTransform_ != null)
                                {
                                    var rSize = data.mRectTransform_.sizeDelta;
                                        data.mRectTransform_.sizeDelta = new Vector2(rSize.x, gm.MNotchAdaptY_);

                                }
                            }
                            break;
                        case AdapterType.eOffsetMaxY_Minus_AdaptY:
                            {
                                if (data.mRectTransform_ != null)
                                {
                                    var rectTop = data.mRectTransform_.offsetMax.y;
                                    var rectRight = data.mRectTransform_.offsetMax.x;
                                        data.mRectTransform_.offsetMax = new Vector2(rectRight, rectTop - gm.MNotchAdaptY_);

                                }
                            }
                            break;
                    }
                }
            }
        }
    }
    // Start is called before the first frame update
    void Start()
    {
        if (Application.isPlaying)
        {
             DoAdapterLogic();
        }
    }
}

将该代码挂到需要调整的适配的ui上,需要注意的是gm.MNotchAdaptY_是刘海屏的高度,需要自己设置更换。
使用如下:unity sirenix,木棉-小健学习,ui,unity,游戏引擎
拖动对应的对象,选好适配方式即可文章来源地址https://www.toymoban.com/news/detail-532092.html


到了这里,关于【Unity】工具类系列——UI刘海屏适配的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity - UI适配方案记录

    1.背景图 界面背景图建议至少宽于21:9;其中16:9的范围为精细范围,12:9的范围为真机最小可见范围。 2.组件 各组件通过设置RectTransform属性来达到正确适配的效果。 3.预览 在unity中,设置Game窗口左上角的分辨率即可预览效果。注意:最终效果需以真机测试为准。 在所有需要缩

    2024年02月06日
    浏览(48)
  • Unity UI适配规则和对热门游戏适配策略的拆解

    本文会介绍一些关于UI适配的基础概念,并且统计了市面上常见的设备的分辨率的情况。同时通过拆解目前市面上较为成功的两款休闲游戏Royal Match和Monopoly GO(两款均为近期游戏付费榜前几的游戏),大致推断出他们的适配策略,以供学习和参考。 设计分辨率: 设计分辨率是指

    2024年03月14日
    浏览(68)
  • 第四十九章 Unity UI适配器组件

    首先,我们介绍内容大小适配器 (Content Size Fitter)组件。 我们新建一个“SampleScene6.unity”场景,然后添加一个Text UI元素,让其居中显示,并且尺寸设置为50*30。   由于我们设置Text的尺寸在水平方向上面太小,也就是Width值太小,里面的内容“New Text”无法全部显示。当然,我

    2024年02月04日
    浏览(50)
  • 【Unity小技巧】最简单的UI设置适配方案

    这期来讲一个简单的UI设计方案,很多同学可能搞不懂锚点、轴心这些概念,导致做好的UI在别人的设备上,乱跑或者是重叠,或者是参加游戏老发时间比较紧来不及做适配,都可以来试试这个方法,通过填充边框来保持游戏画面的原始比例,所以它的缺点也很明显,在一些移

    2024年02月04日
    浏览(38)
  • 【Unity小技巧】最简单的UI设置适配方案,萌新必看

    这期来讲一个简单的UI设计方案,很多同学可能搞不懂锚点、轴心这些概念,导致做好的UI在别人的设备上,乱跑或者是重叠,或者是参加游戏老发时间比较紧来不及做适配,都可以来试试这个方法,通过填充边框来保持游戏画面的原始比例,所以它的缺点也很明显,在一些移

    2024年02月11日
    浏览(36)
  • 【Unity 实用插件篇】 | UI适配神器 Device Simulator 移动设备模拟器 的详细使用方法

    前言 今天带来的是Unity提供的一个设备模拟器 Device Simulator 。 它可以帮助开发者在编辑器中模拟出移动端的环境,直接进行测试。 所有操作都可以在编辑器上进行#

    2024年02月11日
    浏览(45)
  • Unity 工具之 UniWebView 内嵌网页/浏览器到应用中,并且根据UGUI大小放置(简单适配UGUI)

    目录 Unity 工具之 UniWebView 内嵌网页/浏览器到应用中,并且根据UGUI大小放置(简单适配UGUI) 一、简单介绍 二、UniWebView 组件上的几个参数属性选项介绍 三、一些关键接口介绍 四、Transition 五、Memory Management(内存管理) 六、Messaging System 七、注意实现 八、效果预览 九、实现

    2024年01月24日
    浏览(43)
  • Unity UGUI一键绑定UI控件工具(编辑器拓展)

    全为一键生成 实现自动生成代码绑定UI控件 并生成字典保存UI控件 减少自己拖拽 和手动书写过程 适用动态加载面板 建议搭配UI框架使用 根据当前选中的gameobject 查找其下方是否有对应类型的控件 有就保存到字典中 然后通过向上递归拼凑地址,然后生成到粘贴板 直接粘贴到目

    2024年04月23日
    浏览(62)
  • Unity跨平台UI解决方案:可能是最全的FairyGUI系列教程

    FairyGUI的项目文件结构 .objs 内部数据目录。注意:不要加入版本管理,因为这里的内容是不需要共享的。 assets 包内容放置目录,资源内容都在这里面,里面还可以分不同的包,便于区分管理(看下图) settings 配置文件放置目录。 ****.fairy 项目识别文件,也就是项目名称 目录

    2024年04月14日
    浏览(50)
  • 【Unity 实用工具篇】 | UIEffect 实现一系列UGUI特效,灰度、负片、像素化特效

    前言 在Unity中 UGUI 的使用几乎是必不可少的,虽然也有NGUI、FGUI等可以使用,但使用UGUI的还是占多数。 而在使用UGUI的过程中,除了一些基础的UI交互页面及逻辑,学习一些UGUI特效的使用也是很有必要的。 接下来会分享一些UGUI中比较简单且实用的特效,供有需要的小伙伴学习

    2024年04月17日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包