这里先发布一个,自己写得unityUI的适配的方案(插播)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了这里先发布一个,自己写得unityUI的适配的方案(插播),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2776字,纯文字阅读大概需要4分钟。
内容图文
这个适配是依据坐标系的象限的思想来进项适配的。參考了部分的NGUI的适配方案。
在程序的事实上,来測量UI距离相机边界的像素然后依据比例来进行适配,个人认为还不错。 放码!
。
有个前提哦就是你要先定一个尺寸。
假如我优先适配1024*768。那在放置这个脚本之前,要把自己的界面还成1024*768的哦。我是依据第一次来进行适配的哦。
using UnityEngine; using System.Collections; #if UNITY_EDITOR using UnityEditor; #endif public 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; } } #else void Start(){ resetMarginOffset(); } #endif void 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; //1 if(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的适配的方案(插播)全部内容,希望文章能够帮你解决这里先发布一个,自己写得unityUI的适配的方案(插播)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。