NGUI_Panel(clipped panels must have a uniform scale)
使用NGUI,通过更改父物体的scale来适配屏幕时,如果子panel使用softclip,子panel会出现错误:clipped panels must have a uniform scale, 出错原因是子panel的scale的x,y,z不一致,因此解决方法就是把panel物体的transform的scale的xyz换算成(1,1,1),通过改变所有子物体的,但改变后为了裁剪会出问题,因此通过修改panel 的clipping下面的offset, center, size值。
先讲一下NGUI的适配:UIRoot的ScallingStyle设置为FixedSize,
ManualHeight 设置为480, 我按800*480制作UI资源
设置完成后,NGUI会按照 screenHeight/480.0f 对UI进行高度适配,由于大部分手机厂商制作的机型宽高比不一致, 因此待NGUI完成适配后,我们需要针对宽做二次适配,屏幕适配的代码如下
public class MyWidgetScale : MonoBehaviour {static bool g_bInit = true;public static float g_fAdaptedX;void Awake (){if (g_bInit){float ration1 = 800f / 480f;float ration2 = Screen.width * 1.0f / Screen.height;g_fAdaptedX = ration2 / ration1;g_bInit = false;}transform.localScale = new Vector3(g_fAdaptedX, 1, 1);}
}
由于上边的适配导致子panel的scale不一致了,因此调整子panel的scale和裁剪区域
基本讲清楚了,下边是代码部分:
子panel没有scrollview
public class AdjustSubPanel : MonoBehaviour {void Start () {float baseScale = 1;if(Screen.width > Screen.height){baseScale = transform.lossyScale.x;}else{baseScale = transform.lossyScale.y;}transform.localScale = new Vector3(baseScale / transform.lossyScale.x, baseScale / transform.lossyScale.y,baseScale / transform.lossyScale.z);UIPanel panel = transform.GetComponent<UIPanel>();panel.baseClipRegion = new Vector4(panel.baseClipRegion.x / transform.localScale.x, panel.baseClipRegion.y / transform.localScale.y, panel.baseClipRegion.z / transform.localScale.x, panel.baseClipRegion.w / transform.localScale.y);panel.clipOffset = new Vector2(panel.clipOffset.x / transform.localScale.x, panel.clipOffset.y / transform.localScale.y);for (int i = 0; i < transform.childCount; i++){transform.GetChild(i).localScale = new Vector3(1 / transform.localScale.x, 1 / transform.localScale.y, 1 / transform.localScale.z);}}
}
子panel上挂在scrollview时
关于localScale和lossyScale的注解:
当GameObject对象A为GameObject对象B的父物体时,父物体A的各个分量放缩值x、y、z的大小应该保持1:1:1的比例,否则当子物体B的Rotation值比例不为1:1:1时,B物体将会发生变形。
设GameObject对象A为B的父物体,当A物体各个分量的放缩值保持1:1:1的比例时,子物体B的lossyScale返回值即为B物体相对世界坐标系的放缩值,关系为B.localScale = B.lossyScale/A.localScale。
public class AdjustSubPanelWithScrollView : MonoBehaviour { void Start(){UIScrollView scrollView = transform.GetComponent<UIScrollView>();float baseScale = 1;if (scrollView.movement == UIScrollView.Movement.Vertical){baseScale = transform.lossyScale.y;}else if (scrollView.movement == UIScrollView.Movement.Horizontal){baseScale = transform.lossyScale.x;}else{Debug.LogError("Unsupported UIScrollView Movement");return;}Debug.Log(baseScale);transform.localScale = new Vector3(baseScale / transform.lossyScale.x, baseScale / transform.lossyScale.y, baseScale / transform.lossyScale.z);UIPanel panel = transform.GetComponent<UIPanel>();panel.baseClipRegion = new Vector4(panel.baseClipRegion.x / transform.localScale.x, panel.baseClipRegion.y / transform.localScale.y, panel.baseClipRegion.z / transform.localScale.x, panel.baseClipRegion.w / transform.localScale.y);panel.clipOffset = new Vector2(panel.clipOffset.x / transform.localScale.x, panel.clipOffset.y / transform.localScale.y);for (int i = 0; i < transform.childCount; i++){transform.GetChild(i).localScale = new Vector3(1 / transform.localScale.x, 1 / transform.localScale.y, 1 / transform.localScale.z);}}
}
NGUI_Panel(clipped panels must have a uniform scale)相关推荐
- Unity使用UIStretch做屏幕自适应遇到clipped panels must have a uniform scale
clipped panels must have a uniform scale,or clipping won't work properly! Unity如果还在使用UIStretch做屏幕自适应 ...
- css动画(transition,translate,rotate,scale)
序言 为什么会用css动画呢 通过CSS3过渡,我们可以在不使用 Flash 动画或 JavaScript 的情况下, 使元素从一种样式变换为另一种样式时为元素添加效果. css动画可以做很多特效,特 ...
- C++11 带来的新特性 (2)—— 统一初始化(Uniform Initialization)
1 统一初始化(Uniform Initialization) 在C++ 11之前,所有对象的初始化方式是不同的,经常让写代码的我们感到困惑.C++ 11努力创造一个统一的初始化方式. 其语法是使用{ ...
- C++11 统一初始化(Uniform Initialization)
1 统一初始化(Uniform Initialization) 在C++ 11之前,所有对象的初始化方式是不同的,经常让写代码的我们感到困惑.C++ 11努力创造一个统一的初始化方式. 其语法是使用{ ...
- 机器学习中的数学——常用概率分布(四):均匀分布(Uniform分布)
分类目录:<机器学习中的数学>总目录 相关文章: · 常用概率分布(一):伯努利分布(Bernoulli分布) · 常用概率分布(二):范畴分布(Multinoulli分布) · 常用概率 ...
- R语言使用runif函数生成符合均匀分布的随机数、使用plot函数可视化符合均匀分布的随机数(Uniform Distribution)
R语言使用runif函数生成符合均匀分布的随机数.使用plot函数可视化符合均匀分布的随机数(Uniform Distribution) 目录
- R语言使用punif函数生成均匀分布累积分布函数数据、使用plot函数可视化均匀分布累积分布函数数据(Uniform Distribution)
R语言使用punif函数生成均匀分布累积分布函数数据.使用plot函数可视化均匀分布累积分布函数数据(Uniform Distribution) 目录
- Avoiding 16 Common OpenGL Pitfalls(避免 16 个常见的 OpenGL 陷阱)
前言 避免 16 个常见的 OpenGL 陷阱原文 Avoiding 16 Common OpenGL Pitfalls Copyright 1998, 1999 by Mark J. Kilgard ...
- 机器学习数据预处理之缺失值:预测填充(回归模型填充、分类模型填充)
机器学习数据预处理之缺失值:预测填充(回归模型填充.分类模型填充) garbage in, garbage out. 没有高质量的数据,就没有高质量的数据挖掘结果,数据值缺失是数据分析中经常遇到的问题 ...
最新文章
- 发文平台对文章发布的基本要求
- HTML前端常见攻击方式案例讲解
- java 利用JAX-RS快速开发RESTful 服务
- 使用Boxfuse轻松在云中运行Spring Boot应用程序
- leetcode 75
- BZOJ 1041 数学
- FLEX与JAVA不通讯错误与解决方法(转)
- 在Mac系统中如何使用App Cleaner Uninstaller Pro清理应用卸载残留?
- 模板题——图论相关(1)
- 传智播客 C/C++学习笔记 指针3 理解指针必须与内存四区相结合
- 《深入浅出WPF》c#WPF入门,快速上手
- php 模拟提交金数据,小程序提交表单到金数据实例
- 辣妈直升机视频号值得学习吗
- 华为(huawei)园区网的常规部署配置示例
- 前辈不是我,借他人事迹助暖通新人!
- 解决window聚焦图片不自动更新,没有“喜欢么”信息提示框问题
- 四则运算算法实现(java)
- 奶爸日记 - 祝你生日快乐
- 诺禾- tcp 网络效劳框架
- php读取mht,php解析mht文件转换成html的实例