这里先公布一个,自己写得unityUI的适配的方案(插播)
来源:互联网 发布:英语名著有声读物软件 编辑:程序博客网 时间:2024/05/21 06:40
这个适配是根据坐标系的象限的思想来进项适配的,参考了部分的NGUI的适配方案。
在程序的其实,来测量UI距离相机边界的像素然后根据比例来进行适配,个人觉得还不错。 放码!。
有个前提哦就是你要先定一个尺寸。假如我优先适配1024*768。那在放置这个脚本之前,要把自己的界面还成1024*768的哦。我是根据第一次来进行适配的哦。
using UnityEngine;using System.Collections;#if UNITY_EDITORusing 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;}}
0 0
- 这里先公布一个,自己写得unityUI的适配的方案(插播)
- 自己写的一个简单得shell得菜单
- 把自己的经历先放到这里
- 这里自己写一个关于ajax简单的异步吧
- 一个自己写得字串的类型转换
- 替朋友写的段代码,先放这里
- (插播)人人都得做爆款——《热点》发布会上的发言
- 自己写的一个导出的程序这里主要用到一下程序
- 这里简单介绍一个自己写的检测某个进程是否存在的bash小脚本
- 自己写得循环往复的方阵,晒晒
- 在这里总结下之后可能会写的文章,算是给自己一个任务清单吧
- 前一段时间没事用c#写了一个串口程序,这里总结一下自己的经验
- 自己整理得一个JavaScript写的一个DIV 弹出网页对话框
- 自寅舍得分享:想要娶女神,你得先把为自己优化成一个优秀的男人
- 很久之前的诗一首,听一个MM得,发到这里.
- 先写一个简单的例子
- 公布一个以前写的随机数生成的方法
- 要想学好位图的读写和显示,还是得自己亲手写一个CDIB类
- 学生信息管理系统(5)——应用程序与数据库连接
- Java中常用的加密方法(JDK)
- 生成PHPDOC文档,转的,不是很好,命令行可用 netbeans不可用
- Android 获取屏幕尺寸与密度
- 自定义对话框
- 这里先公布一个,自己写得unityUI的适配的方案(插播)
- java_时间戳与Date_相互转化
- Android JNI
- MD5加密算法
- c++ builder listview 重绘
- document.documentElement.scrollTop || document.body.scrollTop问题分析
- 解决java.lang.OutOfMemoryError: bitmap size exceeds VM 方式
- Python多进程并发操作中进程池Pool的应用<转>
- Python 提交表单数的一点简单介绍