Unity3d 手机屏幕自动适配

现在,市场上的手机分辨率多样化。带给开放人员一个很大的“跨界问题”。本人,昨晚突发奇想。手机分辨率多样化,但手机开放人员,制作UI时,最为重要的两个因素就是Position(位置)、Scale(大小);

我引入一个“比例”概念;

比例:

原始开放的平台手机分辨率为960*640,一个GameObject:Position(300,100,0),Scale(100,100,1);

那么“移植”到 800*480手机上;

“比例”:RatioV3(800/960,480/640,1);

次GameObject在800*480手机为:Position(249,75,0),Scale(83,75,1);

效果还算是比较理想;

代码如下:

publicclass _Public : MonoBehaviour {

public    static Vector3  helfScreen;

  Vector3  initScreen=new Vector3 (480,320,1);

public  static  Vector3  ratioScreen;

 

// Use this for initialization

void Awake () {

getScreen();

}

public   void getScreen(){

 

if(helfScreen==Vector3.zero){

helfScreen.x=(float)(Screen.width/2);

helfScreen.y=(float)(Screen.height/2);

helfScreen.z=1f;

}

if(ratioScreen==Vector3.zero){

float  x= helfScreen.x/ initScreen.x;

float  y= helfScreen.y / initScreen.y;

ratioScreen.x=float.Parse(x.ToString("F2"));

ratioScreen.y=float.Parse(y.ToString("F2"));

ratioScreen.z=1f;

}

 

}

}

.81640625public class _ScreenFit : MonoBehaviour {

[System.Serializable]

public  class  ScreenFit{

public  Transform   fitTrans;

public  bool isFitScale=true;

 

public void initFit(){

//  Fit Position

if(fitTrans==null)return ;

 

Vector3 position=fitTrans.localPosition;

position.x*=_Public.ratioScreen.x;

position.y*=_Public.ratioScreen.y;

position.z*=_Public.ratioScreen.z;

fitTrans.localPosition=position;

 

// Fit Scale

if(isFitScale){

 

Vector3 scale=fitTrans.localScale;

if(scale==Vector3.one){

scale.y*=_Public.ratioScreen.y;

scale.x*=_Public.ratioScreen.y;

scale.z*=_Public.ratioScreen.z;

//scale.x*=_Public.ratioScreen.x;

}

else {

scale.x*=_Public.ratioScreen.x;

scale.y*=_Public.ratioScreen.y;

scale.z*=_Public.ratioScreen.z;

}

fitTrans.localScale=scale;

 

}

}

}

public  ScreenFit[]   screenFitS;

public   Transform  backTrans;

    

// Use this for initialization

void Start () {

initScreenFit();

}

 

void initScreenFit(){

foreach(ScreenFit  screenFit in screenFitS){

screenFit.initFit();

}

 

if(backTrans==null) return ;

Vector3 scale=backTrans.localScale;

scale.x=_Public.helfScreen.x*2;

scale.y=_Public.helfScreen.y*2;

backTrans.localScale=scale;

 

}

}

 

效果图如下:960*480

800*480下

转载于:https://www.cnblogs.com/kuangwu/archive/2013/03/11/2953739.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[机器学习笔记]Note9--机器学习系统设计

继续是机器学习课程的笔记,本节课的内容主要是介绍如何设计一个机器学习系统。 首先要做什么 这节课将介绍如何设计一个机器学习系统,首先是以设计一个垃圾邮件分类器算法作为例子。 为了解决这个问题,首先要决定的是如何选择并表达特征向…

java 图片阴影_Java 为 PPT 中的图形添加阴影效果

在PowerPoint文档中,给图形添加阴影效果能增强图形的立体感,使其贴近现实效果,提升文档的美观度。 本文将展示如何使用Free Spire.Presentation for Java为PPT中的图形添加阴影效果。除了文中展示的预设阴影效果,还可以添加内部阴…

nyoj 21 三个水杯 BFS

三个水杯 时间限制:1000 ms | 内存限制:65535 KB难度:4描述给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子。三个水杯之间相互倒水,并且水杯没有标识,只…

论文阅读(1)--Fine-grained Image Classification by Exploring Bipartite-Graph Labels

这是阅读《Fine-grained Image Classification by Exploring Bipartite-Graph Labels》这篇论文所做的笔记。 这篇论文是来自NEC实验室,是一篇有关细粒度分类/精细分类方面的论文。 0. 摘要 首先提出一个问题,给定一张食物的图片,对于一个…

java常用jar_常用jar包含义

常用jar包含义activation.jar:与javaMail有关的jar包,使用JavaMail时应与mail.jar一起加入到lib中去,具体负责mail的数据源和类型等ajaxtags-1.2-beta3.jar:ajax提供的标签库,使用户能像使用jsp普通标签一样使用ajaxant.jar和antlr.jar(可以删…

LS 24 Bracket sequence(DP)

Bracket sequence Given string s made up with (, ), ?, count the way to substitude ? with ( or ) to form regular bracket sequence. Input A string s. (1≤|s|≤1000) Ouptut An integer denotes the number of ways modulo (1097). Sample input ???? Sample ou…

java注释和注解_深入理解JAVA注解(Annotation)以及自定义注解

Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。Java 语言中的类、方法、变量、参数和包等都可以被标注。注解可以看作是一种特殊的标记,在程序在编译或者运行时可以检测到这些标记而进行一些特殊的处理。本文对 Annotation 进行了…

[机器学习笔记]Note10--支持向量机(SVM)

继续是机器学习课程的笔记,这节课的内容是介绍支持向量机(SVM)的内容。SVM是一个非常强大且流行的算法,在一些情况下,面对一些复杂的非线性问题可以提供比逻辑回归或神经网络更加简洁更加有效的结果。 优化目标 首先…

[机器学习笔记]Note11--聚类

继续是机器学习课程的笔记,本节介绍的是聚类方法,主要是K-means算法。 非监督学习 首先介绍监督学习和非监督学习的区别。一个监督学习的例子如下图,给定训练集如:{(x(1),y(1)),(x(2),y(2)),…,(x(m),y(m))},每个训练实例都有对应的标签。 …

LLVM每日谈之十二 LLVM的源码分析之Pass相关

作者:snsn1984题记:在学习LLVM的过程中,要想学的更加深入,掌握更多的技能,LLVM的源码是必须要读的,但是在这么多的源码中,从哪里下手?很容易让人找不到头脑,本文这里就先…

[机器学习笔记]Note12--降维

继续是机器学习课程的笔记,本节介绍的是降维方法,这也是非监督学习中的一个问题,主要介绍主要成分分析(Principal Component Analysis,PCA)算法。 降维 动机一:数据压缩 使用降维的一个原因是…

jetty java 实例_Maven+Jetty+Servlet 简单示例

一个朋友让我帮他写一个基于 Servlet JettyDerby 实现的项目。本文先介绍 MavenJettyServlet 的整合例子。1、添加依赖pom.xml 里添加依赖javax.servletjavax.servlet-api3.1.0org.eclipse.jetty9.4.14.v20181114jetty-webapp2、准备两个 Servlet 例子HelloServletpackage com.…

节后的人才市场开始活跃了?

今天居然接到一个印度打来的电话,一印度MM操着纯正的印度英语居然说是从Linkedin上找到我的,希望我能参加他们杭州公司的面试,费了很大的劲也没让她弄明白我不愿意relocate。 只能说节后的人才市场就像快烧开的水,分子们开始活跃了…

mysql 静态表 是不是 myisam_mysql的静态表和动态表的区别,MyISAM和InnoDB的区别

静态表字段长度固定,自动填充,读写速度很快,便于缓存和修复,但比较占硬盘,动态表是字段长度不固定,节省硬盘,但更复杂,容易产生碎片,速度慢,出问题后不容易重…