这个适配是依据坐标系的象限的思想来进项适配的。參考了部分的NGUI的适配方案。

在程序的事实上,来測量UI距离相机边界的像素然后依据比例来进行适配,个人认为还不错。 放码!

有个前提哦就是你要先定一个尺寸。

假如我优先适配1024*768。那在放置这个脚本之前,要把自己的界面还成1024*768的哦。我是依据第一次来进行适配的哦。

using UnityEngine;
using System.Collections;
#if UNITY_EDITOR
using UnityEditor;
#endifpublic enum QuadrantLayout{Quadrant1,Quadrant2,Quadrant3,Quadrant4
}[ExecuteInEditMode]
public class AutoLayout  : MonoBehaviour{[HideInInspector] public QuadrantLayout quadrant;[HideInInspector] public Vector2 margin;Vector3 lastPostion;#if UNITY_EDITOR[HideInInspector] [SerializeField] private bool isFirstLoad=true;int pixelWidth;void Awake(){lastPostion = this.transform.localPosition;if(isFirstLoad){updateMarginOffset();isFirstLoad=false;}else{resetMarginOffset();}}void Update(){if(!Application.isPlaying){if(Vector3.Distance(lastPostion,this.transform.localPosition)>0.001f && Selection.activeGameObject == this.gameObject){updateMarginOffset();UnityEditor.EditorUtility.SetDirty(this);}else{resetMarginOffset();}lastPostion = this.transform.localPosition;}else{if((int)Camera.main.pixelWidth!=pixelWidth){resetMarginOffset();}pixelWidth = (int)Camera.main.pixelWidth;}}
#elsevoid Start(){resetMarginOffset();}
#endifvoid updateMarginOffset(){float m = (Camera.main.WorldToScreenPoint(new Vector3(1,0,0))-Camera.main.WorldToScreenPoint(Vector3.zero)).x;float halfWidth=Camera.main.pixelWidth/2.0f/m;float halfHeight=Camera.main.pixelHeight/2.0f/m;Vector3 v = this.transform.position;//1if(v.x>=0 && v.y>=0){quadrant = QuadrantLayout.Quadrant1;margin = new Vector2(halfWidth-v.x,halfHeight-v.y);//2}else if(v.x>=0 && v.y<=0){quadrant = QuadrantLayout.Quadrant2;margin = new Vector2(halfWidth-v.x,halfHeight+v.y);//3}else if(v.x<=0 && v.y<=0){quadrant = QuadrantLayout.Quadrant3;margin = new Vector2(halfWidth+v.x,halfHeight+v.y);//4}else if(v.x<=0 && v.y>=0){quadrant = QuadrantLayout.Quadrant4;margin = new Vector2(halfWidth+v.x,halfHeight-v.y);}}void resetMarginOffset(){Vector3 sv = Vector3.zero;float m = (Camera.main.WorldToScreenPoint(new Vector3(1,0,0))-Camera.main.WorldToScreenPoint(Vector3.zero)).x;float halfWidth=Camera.main.pixelWidth/2.0f/m;float halfHeight=Camera.main.pixelHeight/2.0f/m;switch(quadrant){case QuadrantLayout.Quadrant1:sv = new Vector3(halfWidth-margin.x,halfHeight-margin.y,0);break;case QuadrantLayout.Quadrant2:sv = new Vector3(halfWidth-margin.x,margin.y-halfHeight,0);break;case QuadrantLayout.Quadrant3:sv = new Vector3(margin.x-halfWidth,margin.y-halfHeight,0);break;case QuadrantLayout.Quadrant4:sv = new Vector3(margin.x-halfWidth,halfHeight-margin.y,0);break;}sv.z = this.transform.position.z;transform.position = sv;}
}

这里先发布一个,自己写得unityUI的适配的方案(插播)相关推荐

  1. 发布一个自己写的.Net代码生成器

    详细介绍:http://chaokers.cn/Exhibit/F/Product_View.aspx?ProductID=21 下载地址:http://www.chaokers.cn/DownCen ...

  2. 发布一个持续集成的npm包并加上装逼小icon

    前言 随着入坑时间的增长,很多小伙伴在使用第三方轮子时不满足于下载xxx.js,script标签引入xxx.js,然后使用轮子的原始方式.想要高大上一点,于是小伙伴们跟npm邂逅了.后来有的小伙伴又想 ...

  3. 发布一个用于WinCE的矢量图控件

    发布一个在wince操作系统下,采用.net compact framework 1.0 ( c#)开发的矢量图控件,我于2007年3月份集中一个月的经历完成了它.当然,它的前身是2005年12月我写 ...

  4. 发布一个实体类属性生成小工具,给开发加点料

    做了很久的代码生成工具,基本上都是基于表生成实体类属性的,把数据库表的信息拿出来,然后之乎者也后生成一个标准的实体类,包含字段.属性.描述等东西. 是基于整个数据库生成整个框架代码的工具,如我的代码生 ...

  5. java发布后功能不能用,急项目发布后java写的打印功能失效了-求解解决方法

    当前位置:我的异常网» J2EE » 急项目发布后java写的打印功能失效了-求解解决方法 急项目发布后java写的打印功能失效了-求解解决方法 www.myexceptions.net  网友分享于 ...

  6. 教你一步步发布一个开源库到 JCenter

    本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 今天想来分享下,如何一步步自己发布一个开源库到 JCenter 这方面的博客网上已经特别多了,所以本篇并不打算仅仅只是记录流程步骤而 ...

  7. vue 生成发布包_年轻人如何从0到1封装发布一个vue组件__Vue.js

    封装发布组件是前端开发中非常重要的能力,通过对常用组件的封装可以提升团队开发的效率,避免重复劳作且不方便维护.好的组件的抽象和封装能让组件得到更广泛和多环境兼容的应用. 本文讲述了如何一步步从0到1封 ...

  8. 发布一个mmap的trie_midrmm02_新浪博客

    发布一个mmap的trie_midrmm02_新浪博客 发布一个mmap的trie     (2012-04-13 03:09:22)     转载▼     标签:     杂谈           ...

  9. 创建构建方法android,如何快速创建并发布一个 Android 库

    一. 前言 最近经常看到各种大神的库,发现用起来非常方便,自己研究了一下,来写个库发布一下,让自己写代码更加方便一点,自己封装了基本的开发工具类.也是搜集了各位大神的优秀代码总结的. 二.必要的准备工 ...

最新文章

  1. Dell 戴尔预装Windows8改成Windows7
  2. 专家谈半导体产业前景 并购热还会继续
  3. sscanf,sscanf_s及其相关用法
  4. c语言 python-C语言和python的区别
  5. eclipse复制代码连接数据库404_再见,Eclipse ...
  6. 844. Backspace String Compare
  7. SQLServer 2012重启服务后,自增1的标识列一次增长了1000左右
  8. android 回车键事件编程
  9. 模版方法模式 Template Method Pattern — 穷人和富人的不同婚恋历程
  10. 设置图片和文字的垂直居中
  11. MyEclipse中更改JRE环境
  12. messageBox的样式修改
  13. Ubuntu 字体安装以及 vscode字体配置
  14. 2018年最新北京落户名单统计分析
  15. 高价拍下巴菲特午餐的90后孙宇晨是谁?
  16. 网站SEO其实很简单,新手必看!!!
  17. ADUM1201BRZ DGTL ISO 2.5KV GEN PURP 8SOIC
  18. php实训参考文献,SPSS实训心得体会
  19. numpy函数hstack,vstack,dstack简介
  20. 数仓 Zabbix 集成 Grafana

热门文章

  1. Python开发【第八篇】:网络编程 Socket
  2. FreeRTOS初步认识
  3. 鸿雁电器oa系统中决策支持模块效果
  4. 如果ASM磁盘组由哪些物理磁盘组成?
  5. 【转】Matlab中特殊符号的写法
  6. 未安装在此服务器场中,无法添加到该范围
  7. 网页效果图设计之色彩索引
  8. LA3029最大子矩阵
  9. hdu 1814 字典序最小的2sat(暴力深搜)
  10. hdu1358 最小循环节,最大循环次数 KMP