Unity 图片资源的适配

前言

 

最近小编做Unity项目时,发现在资源处理这方面和Android有所不同;例如:Android的资源文件夹res下会有着mipmap-mdpi,mipmap-hdpi,mipmap-xhdpi,mipmap-xxhdpi,mipmap-xxxhdpi这五个文件夹,这是因为我们一般在蓝湖UI设计图上下载的图片资源都是对应这五种分辨率的图片,而在Unity中,图片资源的分辨率的自适应却没有这个概念;不过Unity倒是有一个Canvas Scaler组件可以做自适应处理;

Android和Unity加载资源的区别

作为一个习惯写Android的人来说,能不能让自己封装一套Image分辨率的自适应脚本呢?当然可以了,我们可以利用Unity内置的资源加载函数来做,在Android中,资源基本都是存放在res文件夹中的,我们获取资源也是通过R.Layout来加载资源相对应的文件夹。

Android加载资源

通过上图,大家可以看到Android中的图片资源放置在mipmap文件夹中的,五张图片的分辨率从小到大依次排列的,而minmap文件夹又放在res文件中的的,而我们在UI语句中想要加载图片资源时都是使用R.minmap.图片资源名来使用,如下图所示

其实应该还要有 ldpi文件夹,这样就形成了低中高三种分辨率的图片文件夹;

屏幕dpi值 (图像每英寸长度内的像素点数);

按照dpi来算的话:

dpi范围密度
0dpi ~ 120dpildpi
120dpi ~ 160dpimdpi
160dpi ~ 240dpihdpi
240dpi ~ 320dpixhdpi
320dpi ~ 480dpixxhdpi
480dpi ~ 640dpi          xxxhdpi

假如手机屏幕密度时xxhdpi,那么mipmap-xxhdpi文件夹下的图片就是最适合的图片。若图片放在其他mipmap中,图片被缩放。

系统自动去其他文件下找图片的顺序:高密度 -> 低密度

Android将实际的屏幕密度分为四个通用尺寸(low,medium,high,and extra high) 
一般情况下的普通屏幕:ldpi是120dpi,mdpi是160dpi,hdpi是240dpi,xhdpi是320dpi 
对于屏幕来说,dpi越大,屏幕的精细度越高,屏幕看起来就越清楚 

按照屏幕尺寸来算的话:

密度建议尺寸
mipmap-mdpi48*48
mipmap-hdpi72*72
mipmap-xhdpi96*96
mipmap-xxhdpi144*144
mipmap-xxxhdpi192*192


 

Unity加载资源

好了,以上就是小编简单给大家带来的Android与Unity加载资源的不同方式,需要详细了解的话可以翻我其他的文章讲解

Unity实战演练

ImageAdapter.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ImageAdapter : MonoBehaviour
{
    public Text text;
    public GameObject imageObject;

    //不同分辨率图片路径
    string path_hdpi = "Images/mipmap-hdpi/image_hdpi";
    string path_mdpi = "Images/mipmap-mdpi/image_mdpi";
    string path_xdpi = "Images/mipmap-xhdpi/image_xhdpi";
    string path_xxdpi = "Images/mipmap-xxhdpi/image_xxhdpi";
    string path_xxxdpi = "Images/mipmap-xxhdpi//image_xxxhdpi";

    // Start is called before the first frame update
    void Start()
    {
        Sprite image;
        //判断dpi,来确认适合哪种分辨率的图片资源
        if (Screen.dpi >= 120 && Screen.dpi < 160)
        {
            image = Resources.Load<Sprite>(path_mdpi);

            text.text = "当前屏幕每寸的像素点值: " + Screen.dpi + '\n'
                + "当前加载的图片为: " + path_mdpi;
        }
        else if (Screen.dpi >= 160 && Screen.dpi < 240)
        {
            image = Resources.Load<Sprite>(path_hdpi);

            text.text = "当前屏幕每寸的像素点值: " + Screen.dpi + '\n'
                + "当前加载的图片为: " + path_hdpi;
        }
        else if (Screen.dpi >= 240 && Screen.dpi < 320)
        {
            image = Resources.Load<Sprite>(path_xdpi);

            text.text = "当前屏幕每寸的像素点值: " + Screen.dpi + '\n'
                + "当前加载的图片为: " + path_xdpi;
        }
        else if (Screen.dpi >= 320 && Screen.dpi < 480)
        {
            image = Resources.Load<Sprite>(path_xxdpi);

            text.text = "当前屏幕每寸的像素点值: " + Screen.dpi + '\n'
                + "当前加载的图片为: " + path_xxdpi;
            Debug.Log(image.name);
        }
        else if (Screen.dpi >= 480 && Screen.dpi < 640)
        {
            image = Resources.Load<Sprite>(path_xxxdpi);

            text.text = "当前屏幕每寸的像素点值: " + Screen.dpi + '\n'
                + "当前加载的图片为: " + path_xxxdpi;
        }
        else
        {
            text.text = "当前屏幕每寸的像素点值: " + Screen.dpi;
        }

        //将读取到的图片资源加载到游戏物体上
        imageObject.GetComponent<Image>().sprite = Resources.Load<Sprite>(path_xxdpi);
    }
}

效果图:

屏幕相关概念分享

分辨率 :
是指屏幕上有横竖各有多少个像素 


屏幕尺寸 :
指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸 
android将屏幕大小分为四个级别(small,normal,large,and extra large)


屏幕密度 :
每英寸像素数 

手机可以有相同的分辨率,但屏幕尺寸可以不相同


对于屏幕来说,dpi越大,屏幕的精细度越高,屏幕看起来就越清楚 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/90977.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据通信——TCP(三次握手及基础特性)

引言 TCP&#xff08;传输控制协议&#xff09;&#xff0c;不像之前的UDP那样&#xff0c;因为这个协议要将很多复杂的东西&#xff0c;所以这次的特性是简单的特性&#xff0c;后续会讲一些复杂难懂的知识&#xff0c;这次先说一些TCP明显的特性 面向连接 TCP提供了对连接的管…

CSS笔记

介绍 CSS导入方式 三种方法都将文字设置成了红色 CSS选择器 元素选择器 id选择器 图中div将颜色控制为红色&#xff0c;#name将颜色控制为蓝色&#xff0c;谁控制的范围最小&#xff0c;谁就生效&#xff0c;所以第二个div是蓝色的。id属性值要唯一&#xff0c;否则报错。 clas…

Dockerfile搭建LNMP运行Wordpress平台

Dockerfile搭建LNMP运行Wordpress平台 一、项目1.1 项目环境1.2 服务器环境1.3 任务需求 二、Linux 系统基础镜像三、Nginx1、建立工作目录2、编写 Dockerfile 脚本3、准备 nginx.conf 配置文件4、生成镜像5、创建自定义网络6、启动镜像容器7、验证 nginx 四、Mysql1、建立工作…

KVM创建虚拟机可访问外网+可使用Xshell等工具连接

创建虚拟机时使用桥接网络模块即可&#xff0c;如下&#xff1a; 1、创建一个存储卷(虚拟机的磁盘) 2、创建虚拟机时选择网络 3、系统安装完成后配置固定IP地址 vi /etc/sysconfig/network-scripts/ifcfg-eth0ONBOOTyes BOOTPROTOstatic IPADDR16.32.15.60 GATEWAY16.32.15.2…

DevOps团队如何提高Kubernetes性能

今天&#xff0c;Kubernetes仍然是开发人员最需要的容器。Kubernets最初由 Google 工程师开发&#xff0c;作为跨本地、公共云、私有云或混合云托管的首选解决方案享誉全球。 来自Statista的报告显示&#xff0c;公共云中的Kubernetes市场份额在过去一年中上升了近30%。并且在…

Stable Diffusion 系列教程 | 打破模型壁垒

目录 1.模型基本分类 1.1 CheckPoint 大模型/底模型/主模型 1.2 VAE美化模型/变分自编码器 1.3 HyperNetwork 超网络 1.4 embeddings&#xff08;/Textual Inversion&#xff09; 嵌入式向量 1.5 loRa 低秩适应模型 2. 下载途径和渠道 2.1 C站 2.1.1 如何筛选到自己需…

【docker】运行registry

registry简介 Docker registry是docker镜像仓库的服务,用于存储和分发docker镜像。 Docker registry主要特点和功能: 存储docker镜像:提供持久化存储docker镜像的功能,存储镜像的各个layer。 分发镜像:拉取和推送镜像的去中心化存储和分发服务。 支持版本管理:给镜像打标签…

离谱事件解决方法2 无法定位程序输入点XXX于动态链接库XXX.dll

事情经过&#xff1a; 本人一只acmer&#xff0c;使用sublime编写代码&#xff0c;但是前两天在打开cpp类型的文件的时候显示报错如下&#xff1a; 这里的dll文件就是动态链接库&#xff0c;它并不是一个可执行文件&#xff0c;里面存放的是程序的函数实现过程&#xff08;公用…

【面试题】MVC、MVP与MVVM模式是什么?

MVC模式 MVC是应用最广泛的软件架构之一&#xff0c;一般MVC分为&#xff1a; Model&#xff08; 模型 &#xff09;、Controller&#xff08; 控制器 &#xff09;、View&#xff08; 视图 &#xff09;。 这主要是基于分层的目的&#xff0c;让彼此的职责分开。View 一般…

EWM是什么

EWM是SAP的一个模块&#xff0c;代表扩展仓库管理&#xff08;Extended Warehouse Management&#xff09;&#xff0c;是SAP企业资源计划&#xff08;ERP&#xff09;的一部分。它提供了一个完整的、高级的仓库管理解决方案&#xff0c;支持企业在全球范围内的仓库管理、订单管…

帮助中心应该用什么工具做?

在线帮助中心是指一个位于互联网上的资源平台&#xff0c;提供给用户获取产品或服务相关信息、解决问题以及获取技术支持的渠道。它通常包含了组织化的知识库、常见问题解答&#xff08;FAQ&#xff09;、操作指南、教程视频、用户手册等内容。在线帮助中心的主要目标是为用户提…

SQL Server、MySQL和Oracle数据库分页查询的区别与联系

摘要&#xff1a;本文将通过一个现实例子&#xff0c;详细解释SQL Server、MySQL和Oracle这三种常见关系型数据库在分页查询方面的区别与联系。我们将提供具体场景下的SQL语句示例&#xff0c;并解释每个数据库的分页查询用法以及优化方法&#xff0c;帮助读者更好地选择适合自…

LeetCode-227-基本计算器Ⅱ

题目描述&#xff1a; 给你一个字符串表达式 s &#xff0c;请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。 注意&#xff1a;不允许使用任何将字符串作为数学表达式计…

DevOps中的持续测试优势和工具

持续测试 DevOps中的持续测试是一种软件测试类型&#xff0c;它涉及在软件开发生命周期的每个阶段测试软件。持续测试的目标是通过早期测试和经常测试来评估持续交付过程的每一步的软件质量。 DevOps中的持续测试流程涉及开发人员、DevOps、QA和操作系统等利益相关者。 持续…

JVM及垃圾回收机制

文章目录 1、JVM组成&#xff1f;各部分作用&#xff1f;1.1 类加载器&#xff08;Class Loaders&#xff09;1.2 运行时数据区&#xff08;Runtime Data Area&#xff09;1.3 执行引擎&#xff08;Execution Engine&#xff09;1.4 本地方法接口&#xff08;Native Interface&…

【PHP】数据类型运算符位运算

文章目录 数据类型简单&#xff08;基本&#xff09;数据类型&#xff1a;4个小类复合数据类型&#xff1a;2个小类特殊数据类型&#xff1a;2个小类类型转换类型判断整数类型浮点类型布尔类型 运算符赋值运算符算术运算符比较运算符逻辑运算符连接运算符错误抑制符三目运算符自…

基于CH552G主控的开源九键小键盘(资料齐全)

Content 1. 前言2. CH55X Arduino平台环境搭建2.1 常规安装2.2 HFS挂载本地服务器安装 3. 例程使用3.1 工程下载及编译3.2 程序烧录 1. 前言 芯片选型&#xff1a;CH552G 本文主要解决Arduino下CH552G芯片包的环境配置问题 开源地址&#xff1a;CV键盘有线小键盘 - 嘉立创ED…

2023泉城杯 easy_log的解题

压缩包解压里面是一个 access.log 日志文件。 捋数据 进行过远程命令执行 这个后续没啥用 可疑字符串 可疑字符串/upload/ma.php?logvar_dump(%27cGFzc3dvcmQ6IHNAZncjdiVmOQ%27);这个首先就判断是不是base64编码&#xff08;英文大小写、数字和、/&#xff09;以及用作后缀…

Little Kernel代码学习笔记

目录 虚拟地址转换为物理地址内核启动Multiboot头部结构启动时的寄存器状态real_start段选择子初始化BSS段 页表转换设置CR4、CR3、EFER寄存器设置页表映射 初始化IDT&#xff0c;执行lk_main 虚拟地址转换为物理地址 // start.S#define PHYS_LOAD_ADDRESS (MEMBASE KERNEL_L…

基于MATLAB开发AUTOSAR软件应用层Code mapping专题-part 6 Data Transfers标签页介绍

这篇文章我们介绍下Data Transfers页的配置,这里边包含的内容是IRV,我之前的文章里有讲解过IRV就是 Inter-Runnable Variables,内部runnable的之间传递数据的变量,在讲解Data Store memory的文章里我们提到了,irv也可以使用Data Store memory的方式来实现,我们先看下IRV如何…