这里先发布一个,自己写得unityUI的适配的方案(插播)
这个适配是依据坐标系的象限的思想来进项适配的。參考了部分的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的适配的方案(插播)相关推荐
- 发布一个自己写的.Net代码生成器
详细介绍:http://chaokers.cn/Exhibit/F/Product_View.aspx?ProductID=21 下载地址:http://www.chaokers.cn/DownCen ...
- 发布一个持续集成的npm包并加上装逼小icon
前言 随着入坑时间的增长,很多小伙伴在使用第三方轮子时不满足于下载xxx.js,script标签引入xxx.js,然后使用轮子的原始方式.想要高大上一点,于是小伙伴们跟npm邂逅了.后来有的小伙伴又想 ...
- 发布一个用于WinCE的矢量图控件
发布一个在wince操作系统下,采用.net compact framework 1.0 ( c#)开发的矢量图控件,我于2007年3月份集中一个月的经历完成了它.当然,它的前身是2005年12月我写 ...
- 发布一个实体类属性生成小工具,给开发加点料
做了很久的代码生成工具,基本上都是基于表生成实体类属性的,把数据库表的信息拿出来,然后之乎者也后生成一个标准的实体类,包含字段.属性.描述等东西. 是基于整个数据库生成整个框架代码的工具,如我的代码生 ...
- java发布后功能不能用,急项目发布后java写的打印功能失效了-求解解决方法
当前位置:我的异常网» J2EE » 急项目发布后java写的打印功能失效了-求解解决方法 急项目发布后java写的打印功能失效了-求解解决方法 www.myexceptions.net 网友分享于 ...
- 教你一步步发布一个开源库到 JCenter
本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 今天想来分享下,如何一步步自己发布一个开源库到 JCenter 这方面的博客网上已经特别多了,所以本篇并不打算仅仅只是记录流程步骤而 ...
- vue 生成发布包_年轻人如何从0到1封装发布一个vue组件__Vue.js
封装发布组件是前端开发中非常重要的能力,通过对常用组件的封装可以提升团队开发的效率,避免重复劳作且不方便维护.好的组件的抽象和封装能让组件得到更广泛和多环境兼容的应用. 本文讲述了如何一步步从0到1封 ...
- 发布一个mmap的trie_midrmm02_新浪博客
发布一个mmap的trie_midrmm02_新浪博客 发布一个mmap的trie (2012-04-13 03:09:22) 转载▼ 标签: 杂谈 ...
- 创建构建方法android,如何快速创建并发布一个 Android 库
一. 前言 最近经常看到各种大神的库,发现用起来非常方便,自己研究了一下,来写个库发布一下,让自己写代码更加方便一点,自己封装了基本的开发工具类.也是搜集了各位大神的优秀代码总结的. 二.必要的准备工 ...
最新文章
- Dell 戴尔预装Windows8改成Windows7
- 专家谈半导体产业前景 并购热还会继续
- sscanf,sscanf_s及其相关用法
- c语言 python-C语言和python的区别
- eclipse复制代码连接数据库404_再见,Eclipse ...
- 844. Backspace String Compare
- SQLServer 2012重启服务后,自增1的标识列一次增长了1000左右
- android 回车键事件编程
- 模版方法模式 Template Method Pattern — 穷人和富人的不同婚恋历程
- 设置图片和文字的垂直居中
- MyEclipse中更改JRE环境
- messageBox的样式修改
- Ubuntu 字体安装以及 vscode字体配置
- 2018年最新北京落户名单统计分析
- 高价拍下巴菲特午餐的90后孙宇晨是谁?
- 网站SEO其实很简单,新手必看!!!
- ADUM1201BRZ DGTL ISO 2.5KV GEN PURP 8SOIC
- php实训参考文献,SPSS实训心得体会
- numpy函数hstack,vstack,dstack简介
- 数仓 Zabbix 集成 Grafana