Unity 之 实现背景图动态适配不同分辨率

这篇具有很好参考价值的文章主要介绍了Unity 之 实现背景图动态适配不同分辨率。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一,问题背景

如何动态为一张背景图实现不同分辨率的适配?

在不同分辨率的设备上,背景图可能会出现拉伸、压缩或失真等问题,因此需要对背景图进行适当的缩放和调整,以确保在不同分辨率下都能够保持良好的外观效果。


二,解决思路

要使用该代码示例,您需要按照以下步骤操作:

  1. 在 Unity 编辑器中,创建一个新的空对象,并将其命名为 BackgroundScaler。

  2. 将 BackgroundScaler.cs 脚本文件添加到 BackgroundScaler 对象中。

  3. 在 工程文件夹中创建一个名为 Backgrounds 的子文件夹,并将背景图添加到该文件夹中。

  4. 在 BackgroundScaler.cs 脚本文件中,将 backgroundSprite 变量设置为您添加的背景图的 Sprite。

  5. 将 BackgroundScaler 对象添加到场景中。

  6. 运行场景,并在不同分辨率的设备上测试背景图的适配效果。


三,注意事项

在使用该代码示例时,请注意以下几点:

  1. 背景图应该具有适当的纵横比,以确保在不同分辨率下都能够保持良好的外观效果。

  2. 在测试适配效果时,请使用不同分辨率的设备进行测试,并观察背景图是否出现拉伸、压缩或失真等问题。

  3. 如果您的背景图太大或太小,可能会影响适配效果。请尝试使用适当的图像编辑工具对背景图进行缩放或裁剪,以确保其大小适中。


四,代码分享

通过使用该代码示例,您可以动态为一张背景图实现不同分辨率的适配,并确保在不同分辨率下都能够保持良好的外观效果。在实际开发中,您可以根据具体情况对代码进行修改和优化,以满足需求。

具体代码如下:

using UnityEngine;
using UnityEngine.UI;

public class BackgroundScaler : MonoBehaviour
{
    public Sprite backgroundSprite; // 存储背景图

    private Image backgroundImage;

    void Awake()
    {
        backgroundImage = GetComponent<Image>();

        // 获取当前设备的分辨率
        float screenHeight = Screen.height;
        float screenWidth = Screen.width;

        // 计算目标背景图的宽高比
        float targetAspect = screenWidth / screenHeight;

        // 获取背景图的宽高比
        float imageAspect = backgroundSprite.rect.width / backgroundSprite.rect.height;

        // 如果目标宽高比小于背景图宽高比,则以宽度为基准进行缩放
        if (targetAspect < imageAspect)
        {
            float scaleFactor = backgroundSprite.rect.width / screenWidth;
            float scaledHeight = backgroundSprite.rect.height / scaleFactor;

            // 设置背景图的大小和位置
            backgroundImage.rectTransform.sizeDelta = new Vector2(screenWidth, scaledHeight);
            backgroundImage.rectTransform.position = Vector3.zero;
        }
        // 如果目标宽高比大于或等于背景图宽高比,则以高度为基准进行缩放
        else
        {
            float scaleFactor = backgroundSprite.rect.height / screenHeight;
            float scaledWidth = backgroundSprite.rect.width / scaleFactor;

            // 设置背景图的大小和位置
            backgroundImage.rectTransform.sizeDelta = new Vector2(scaledWidth, screenHeight);
            backgroundImage.rectTransform.position = Vector3.zero;//new Vector2(screenWidth / 2, screenHeight / 2);
        }

        // 设置背景图的 sprite
        backgroundImage.sprite = backgroundSprite;
    }
}

五,实战应用

根据画布大小和屏幕比例来决定背景缩放比例:文章来源地址https://www.toymoban.com/news/detail-438205.html

using UnityEngine;
using UnityEngine.UI;

public class BackgroundScaler : MonoBehaviour
{
    public Canvas BackgroundCanvas;

    private Image backgroundImage;

    private void Start()
    {
        if (BackgroundCanvas != null)
        {
            backgroundImage = GetComponent<Image>();
            UpdateBackgroundSize();
        }
    }

    private void UpdateBackgroundSize()
    {
        RectTransform rt = backgroundImage.rectTransform;
        float screenWidth = BackgroundCanvas.GetComponent<RectTransform>().rect.width; //Screen.width;
        float screenHeight = BackgroundCanvas.GetComponent<RectTransform>().rect.height; //Screen.height;
        float screenRatio = screenWidth / screenHeight;
        float bgRatio = rt.rect.width / rt.rect.height;

        if (screenRatio > bgRatio)
        {
            rt.sizeDelta = new Vector2(screenWidth, screenWidth / bgRatio);
        }
        else
        {
            rt.sizeDelta = new Vector2(screenHeight * bgRatio, screenHeight);
        }

        rt.anchoredPosition = new Vector2(0, 0);
    }
}

到了这里,关于Unity 之 实现背景图动态适配不同分辨率的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 屏幕分辨率:PC / 手机 屏幕常见分辨率,前端如何适配分辨率

    一、常见的PC屏幕分辨率 序号 水平像素点数和垂直像素点数 也被称为 常见显示器 1 1366 × 768 720p 或 HD Ready 常见于笔记本电脑和低端桌面显示器 2 1920 × 1080 1080p 或 Full HD / 全高清 高端笔记本电脑和中高档台式机 3 2560 × 1440 2K 分辨率 常见于高端笔记本电脑和高端台式机 4 38

    2024年02月03日
    浏览(73)
  • 【Unity3D】Android 打包 ② ( Android 编译选项 | Android 工程设置 | 配置基本信息 | 配置不同分辨率图标 | 配置启动动画 | 其它设置 )

    在上一篇博客 【Unity3D】Android 打包 ① ( Android 编译选项 | 安装 Android Build Support 模块 ) 中 讲解了 Android 打包的最基本配置 , 安装 Android Build Support 模块 ; 本篇博客继续讲解后续工作 ; 在 Unity 编辑器中选择 \\\" 菜单栏 | File | Build Settings \\\" 选项 , 点击 Build Settings 对话框的左下角的

    2023年04月19日
    浏览(63)
  • Python 不同分辨率图像峰值信噪比[PSNR]

    PNNR:全称为“Peak Signal-to-Noise Ratio”,中文直译为峰值信噪比 前言 一、定义 二、Python代码 1.自定义 2.Tensorflow 总结 峰值信噪比是一种衡量图像质量的指标,描述的是最大值信号与背景噪音之间的关系。 一般来说,PSNR高于40dB说明图像质量极好(即非常接近原始图像);在

    2024年02月01日
    浏览(53)
  • 两个镜头、视野、分辨率不同的相机(rgb、红外)的视野校正

    目前在做的项目用到两个摄像头,一个是热成像摄像头、另一个是普通的rgb摄像头。 一开始的目标是让他们像素级重合,使得点击rgb图像时,即可知道其像素对应的温度。但是在尝试的过程中,发现基本不可能。因为由于纵深、遮挡、透视变形、视差等问题,两个摄像头拍摄

    2024年02月14日
    浏览(42)
  • python求不同分辨率图像的峰值信噪比,一文搞懂

    可以使用 Python 的 NumPy 和 OpenCV 库来实现这个任务。提前准备一张图片作为素材。 峰值信噪比(Peak Signal to Noise Ratio,PSNR)是衡量图像质量的常用指标,它表示图像中信号和噪声的比值。通常,较高的 PSNR 值表示图像质量较高。 PSNR 的公式如下: 其中, MAX 是图像的最大亮度

    2024年02月05日
    浏览(48)
  • 电脑多个不同分辨率屏幕鼠标移动时出现偏移、错位情况的解决方法

      本文介绍在使用 不同尺寸 、 不同分辨率 的两个或多个电脑屏幕时,鼠标在不同屏幕之间切换时,出现偏移、飘动、不规则运动等情况的解决方法。   对于使用两个或多个电脑屏幕的用户而言,鼠标在不同屏幕之间的切换有时候会出现偏移的问题。在同时使用多个相

    2024年02月16日
    浏览(49)
  • unity怎么设置分辨率

    要设置Unity中的游戏分辨率(最终发布),有以下两种方法: 其中,Screen.SetResolution()函数用于设置游戏分辨率,参数含义分别为宽度、高度和是否全屏。需要注意的是,在不同的设备上使用固定的分辨率可能会导致显示效果失真或变形,因此最好根据具体设备和游戏的需求进

    2024年02月12日
    浏览(51)
  • unity设置分辨率的两种方法

    unity设置分辨率的两种方法 使用Unity编辑器中的分辨率设置工具。打开Unity编辑器,选择菜单栏中的“Edit” - “Project Settings” - “Player”,在“Resolution and Presentation”选项卡中选择想要的分辨率,然后点击“Apply”按钮即可。 使用脚本设置分辨率。在Unity中创建一个脚本,使

    2024年02月11日
    浏览(84)
  • centos7新增分辨率 1920 1080 ,网上各种方法大罗列!(亲测针对不同设备,有的有用!有的......)

    步骤总结如下: cvt 1920 1080 xrandr --newmode \\\" 1920x1080_60.00\\\"173.0019202048 2248 2576 1080 1083 1088 1120 - hsync +vsync xrandr --addmode VGA-1 “1920x1080_60.00” (VGA-1 要看自己的配置,别瞎改) xrandr -s 1920x1080_60.00 要想永久生效,请看文末几种方法 (总结网上多种方法) 具体过程截图如下!! cvt 1920

    2024年02月10日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包