Unity解决:Unity SpriteRenderer屏幕自适应的多种模式【动态调整大小 以遮盖Ipad所谓的安全区问题】

这篇具有很好参考价值的文章主要介绍了Unity解决:Unity SpriteRenderer屏幕自适应的多种模式【动态调整大小 以遮盖Ipad所谓的安全区问题】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上代码:

using UnityEngine;
 
[RequireComponent(typeof(Camera))]
public class SpriteAdapter : MonoBehaviour {
 
    [System.Serializable]
    public class SpriteInfo
    {
        public SpriteRenderer Value = null;
        public EFillModel Model = EFillModel.ShowAll;
    }
 
    public enum EFillModel
    {
        /// <summary>
        /// 显示图片的所有内容
        /// </summary>
        ShowAll,
        /// <summary>
        /// 使图片内容填满屏幕
        /// </summary>
        Full,
        /// <summary>
        /// 根据图片高度填充屏幕
        /// </summary>
        WithHeight,
        /// <summary>
        /// 根据图片宽度填充屏幕
        /// </summary>
        WithWidth
        
    }
 
    public enum EUpdateType
    {
        /// <summary>
        /// 只在唤醒时更新一次
        /// </summary>
        UpdateOnAwake,
        /// <summary>
        /// 再每次视口发生变化的时候更新一次
        /// </summary>
        UpdateOnViewportChanged
    }
 
    public EUpdateType TickType = EUpdateType.UpdateOnAwake;
    public SpriteInfo[] Members;
    Camera Viewport;
    float ScreenRatio;
 
    void Awake () {
        Viewport = GetComponent<Camera>();
        UpdateAll();
    }
 
    private void LateUpdate()
    {
        if (TickType != EUpdateType.UpdateOnViewportChanged) return;
        if (ScreenRatio != Viewport.aspect)
        {
            UpdateAll();
        }
    } 
 
    /// <summary>
    /// 更新所有应用屏幕适配的图片
    /// </summary>
    void UpdateAll()
    {
        for (int i = 0; i < Members.Length; i++)
        {
            AdaptSpriteRender(Members[i]);
        }
 
        ScreenRatio = Viewport.aspect;
    }
 
    /// <summary>
    /// 使sprite铺满整个屏幕
    /// </summary>
    private void AdaptSpriteRender(SpriteInfo _spriteInfo)
    {
        SpriteRenderer spriteRenderer = _spriteInfo.Value;
        Vector3 scale = spriteRenderer.transform.localScale;
        float cameraheight = Viewport.orthographicSize * 2;
        float camerawidth = cameraheight * Viewport.aspect;
        float texr = (float)spriteRenderer.sprite.texture.width / spriteRenderer.sprite.texture.height;
        float viewr = camerawidth / cameraheight;
        switch (_spriteInfo.Model)
        {
            case EFillModel.WithHeight:
                //> 根据图片高度进行填充
                scale *= cameraheight / spriteRenderer.bounds.size.y;
                break;
            case EFillModel.WithWidth:
                //> 根据图片宽度进行填充
                scale *= camerawidth / spriteRenderer.bounds.size.x;
                break;
            case EFillModel.Full: 
                //> 填满整个屏幕
                if (viewr >= texr)
                {
                    if(viewr >= 1 && texr >= 1 || texr < 1)
                        scale *= camerawidth / spriteRenderer.bounds.size.x;
                    else
                        scale *= cameraheight / spriteRenderer.bounds.size.y;
                }
                else
                {
                    if (viewr <= 1 || texr > 1)
                        scale *= cameraheight / spriteRenderer.bounds.size.y; 
                    else
                        scale *= camerawidth / spriteRenderer.bounds.size.x;
                }
                break;
            default:
                //> 在屏幕上显示图片的全部内容
                if (viewr >= texr)
                {
                    scale *= cameraheight / spriteRenderer.bounds.size.y;
                }
                else
                {
                    scale *= camerawidth / spriteRenderer.bounds.size.x;
                }
                break;
        }
        spriteRenderer.transform.localScale = scale; 
    } 
}

如何使用:

1.把脚本挂在Camera上

2.把需要进行屏幕适配的SpriteRender对象放在Member队列中

3.选择更新类型EUpdateType、选择适配类型EFillModel即可

unity sprite renderer 铺满屏幕视口,Unity,C#,unity,c#文章来源地址https://www.toymoban.com/news/detail-830566.html

到了这里,关于Unity解决:Unity SpriteRenderer屏幕自适应的多种模式【动态调整大小 以遮盖Ipad所谓的安全区问题】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Unity 关于SpriteRenderer 和正交相机缩放

    750x1334 分辨率下为全屏显示,那么如何在相机size不改变的情况下使精灵全屏显示呢?相机是正交相机!需要计算不同分辨率下的比例,通过原始的比例和当前比例就能获的精灵的x 和 y的缩放比例,达到不同分辨率下不改变相机的size 使精灵显示的效果一样了

    2024年02月03日
    浏览(29)
  • Unity 动态更换Image图片 && UI自适应

    前提:Image源文件必须存放在自行创建的文件夹[Resources]中 方式一:typeof 类型 Resources.Load()动态更换Image 方式二:泛型 这里的icon_{数值:00}实际上是图片的名称,只不过用的是正则的方式替换了

    2024年02月11日
    浏览(50)
  • Unity 物体固定屏幕尺寸(透视模式)

    如图所示物体远离摄像机后会被放大,靠近相机会被缩小,使得在屏幕上的大小保持不变; 导入插件后使用 gameObject.SetFixedScreenSize 即可启动固定屏幕尺寸功能

    2024年01月16日
    浏览(42)
  • Unity编辑器拓展——Editor模式下屏幕坐标转换为世界坐标

    发会牢骚,最近一直在做Unity的编辑器拓展,其中难的地方不少,但不至于到看不懂的地步,可一做到关于坐标转换的内容时把我弄不会了。 这个不查不知道,一查吓一跳,Unity的坐标系非常多,有世界坐标,屏幕坐标,局部坐标,视窗坐标等等,而且每一个都是不一样的坐

    2024年02月03日
    浏览(50)
  • python黑客代码雨:实现包括中文等的多种语言,全屏幕显示,从根本解决中文不显示问题,有完整可执行代码

    完整代码放在最下面 上结果图: 中文无法显示的亚子:(也挺好看的哈哈) 正题: 代码能跑但是中文是这种乱码或者黑屏的情况主要是因为没有指定字体或者字体是你电脑没有的 如何找到自己电脑的字体呢,代码如下: 将获取的字体复制到一个word文档或者其他方式都可以

    2024年02月12日
    浏览(46)
  • 前端实现大屏缩放自适应屏幕

    在前端实现大屏缩放自适应屏幕的过程中,可以使用以下几种方式: 使用CSS3的缩放属性(transform: scale())来缩放页面元素,以适应不同大小的屏幕。缩放后,需要使用CSS来重新布局和调整页面元素的尺寸和位置。 使用CSS的@media查询来根据不同的屏幕大小调整元素的样式和布

    2024年02月20日
    浏览(47)
  • vue 项目的屏幕自适应方案

    方案一:使用 scale-box 组件 属性: width  宽度 默认  1920 height  高度 默认  1080 bgc  背景颜色 默认  \\\"transparent\\\" delay 自适应缩放防抖延迟时间(ms) 默认  100 vue2版本: vue2大屏适配缩放组件(vue2-scale-box - npm) 或者 使用方法: vue3版本: vue3大屏适配缩放组件(vue3-scale-box

    2024年01月18日
    浏览(33)
  • QT 程序自适应屏幕分辨率

    参考资料:https://blog.csdn.net/woshiwangxin0/article/details/78659209 1、step1: 点击UI界面文件控件间的空白区域,然后选择工具中的栅格布局(网格布局),点击后,它会自动调整你的控件大小,默认将你的widget的框长宽大小设置为0。 2、step2 需要对每个控件设置其大小(最小宽、高以

    2024年02月16日
    浏览(43)
  • UE4贴图自适应屏幕大小

    游戏开发中,不同屏幕下的分辨率不同,模型/物品被拉伸之后贴图也会随之拉伸。 如果需要在不同比例下实现贴图真实大小不变(以下简称为自适应),需要对UV进行缩放处理之后再取得对应贴图的颜色。 本文提供一种能够实现不同设备下面贴图的大小不变的方法,主要是

    2024年02月09日
    浏览(40)
  • unity webgl网页运行后屏幕模糊,UI无响应问题解决

    【记一个莫名其妙的问题】 工具:Unity 2019.4.40f1c1 先前Unity打包apk,设置了最大帧率15 在Project Settings -Quality中设置了Other-VSync Count:Don’t Sync 运行后,帧率稳定在100上下,呵呵 后来在代码中加了一行: 问题解决 今天,准备再打一个webgl包 打包运行后,打开网页,画面停留在

    2024年02月06日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包