2、在工程中新建一个脚本,脚本可以命名为“ScreenWHTest”。
3、选中“ScreenWHTest”脚本,双击脚本或者右键“Open C# Project”,打开脚本。
4、在打开的“ScreenWHTest”脚本上进行编辑,首先获取当前屏幕的宽与高,然后把获取到的宽与高打印在控制台console上。
5、脚本编译正确后,回到Unity界面,在场景中新建一个“GameObject”,并且把脚本“ScreenWHTsest”赋给“GameObject”。
6、可以把屏幕设置成制定大小,运行场景,可以看到控制台Console上获取到的屏幕宽与高与设定的一致。
IOS:
IOS:使用shell命令打包并上传Itunes
Unity3d:
Unity3d:Canvas适配屏幕分辨率与锚点(Anchors与Pivot)
Unity3d:在屏幕边缘显示其他玩家方位
Unity3d:命令行打包Android
Unity3d:命令行编译IOS
Unity3d:使用Jenkins自动编译打包IOS(只能打包Development)
Unity3d:使用Jenkins自动编译打包IOS(打包Ad-hoc,上传itunes)
所有的UI都有一个Root Canvas,该Canvas的RectTransform不可修改。
所有 Canvas坐标系 方向都是 右侧为X轴正方向 , 上方为Y轴正方向 。
该Canvas还带有一个 Canvas Scaler 组件,可以通过该组件适配不同的屏幕分辨率。
Canvas Scaler 中有一个 UI Scale Mode 属性,用于确定画布中的UI元素如何缩放。
以下假如屏幕分辨率为1500 * 3000。
使Canvas宽高保持与屏幕分辨率一致。屏幕分辨率有多大,Canvas宽高就有多大( Scale Factor 缩放因子为1时)。
所以, Canvas宽高 = 屏幕分辨率 / 缩放因子 。
使Canvas的宽高比与屏幕分辨率的宽高比保持一致。
缩放时需要基于下面的 Reference Resolution(参考分辨率) 进行缩放。
因为此时屏幕分辨率的宽高比为:1500 / 3000 = 0.5,所以在该模式下,无论怎么调整参数,Canvas宽高比也一直为0.5,不会变。
所以, Canvas宽高比 = 屏幕分辨率宽高比 。
缩放时用的参考分辨率。
下面假设参考分辨率是1080 * 1920。
如果屏幕分辨率与参考分辨率的宽高比不一致,则根据选择的模式对Canvas宽高进行缩放。
如果屏幕分辨率与参考分辨率的宽高比一致,该选项怎么调都不管用。
基于下面 Match 对Canvas宽高进行缩放。
缩放后,Canvas的宽高一定不低于参考分辨率的宽高。
缩放后,Canvas的宽高一定不高于参考分辨率的宽高。与 Expand 类似。
锚点说难不难,只是不好描述,但可以用例子来说明。
假如Canvas拥有一个Image节点。
对于 Image所在的坐标系 , 坐标系方向与Canvas坐标系方向相同 。
下面看下Image节点的 锚点在Canvas的不同位置 的情况:
单锚点 ,从Unity上看,就是4个小三角形聚在一个点。
单锚点在Canvas的位置(假设为点p) 都满足以下逻辑:
可以总结出以下公式(p为单锚点在Canvas的位置,pivot为单锚点的Pivot属性):
Image所在坐标系 原点在Canvas中的坐标 = (p.x + Image.Width * (0.5 - pivot.x), p.y + Image.Height * (0.5 - pivot.y)) 。
双锚点 ,从Unity上看,就是2个小三角形聚在一个点。
左上角有2个小三角形,左下角有2个小三角形
此时,Image拥有 PosX,Top,Width,Bottom 这四个位置参数。
而且, 锚点的Pivot的Y不起作用 。
Image的Height = (Canvas.Height - Top - Bottom) / 2 。
如果设置Image的Top,Bottom都为0的话,则Image的高会与Canvas的高一致。
Image所在坐标系原点在Canvas中的坐标 = (Image.Width * (0.5 - Pivot.x) + PosX , Image.Height / 2 + Top) 。
底部边框的中心有2个小三角形,顶部边框的中心有2个小三角形
此时,Image拥有 PosX,Top,Width,Bottom 这四个位置参数。
而且, 锚点的Pivot的Y不起作用 。
Image的Height = (Canvas.Height - Top - Bottom) / 2 。
如果设置Image的Top,Bottom都为0的话,则Image的高会与Canvas的高一致。
Image所在坐标系原点在Canvas中的坐标 = (Image.Width * (0.5 - Pivot.x) + Canvas.Width / 2 + PosX , Image.Height / 2 + Top) 。
右上角有2个小三角形,右下角有2个小三角形
此时,Image拥有 PosX,Top,Width,Bottom 这四个位置参数。
而且, 锚点的Pivot的Y不起作用 。
Image的Height = (Canvas.Height - Top - Bottom) / 2 。
如果设置Image的Top,Bottom都为0的话,则Image的高会与Canvas的高一致。
Image所在坐标系原点在Canvas中的坐标 = (Image.Width * (0.5 - Pivot.x) + Canvas.Width + PosX , Image.Height / 2 + Top) 。
左上角有2个小三角形,右上角有2个小三角形
此时,Image拥有 Left,PosY,Right,Height 这四个位置参数。
而且, 锚点的Pivot的X不起作用 。
Image的Width = (Canvas.Width - Left - Right) / 2 。
如果设置Image的Left,Right都为0的话,则Image的宽会与Canvas的宽一致。
Image所在坐标系原点在Canvas中的坐标 = (Image.Width / 2 + Left , Image.Height * (0.5 - Pivot.x) + PosY) 。
左侧边框的中心有2个小三角形,右侧边框的中心有2个小三角形
此时,Image拥有 Left,PosY,Right,Height 这四个位置参数。
而且, 锚点的Pivot的X不起作用 。
Image的Width = (Canvas.Width - Left - Right) / 2 。
如果设置Image的Left,Right都为0的话,则Image的宽会与Canvas的宽一致。
Image所在坐标系原点在Canvas中的坐标 = (Image.Width / 2 + Left , Image.Height * (0.5 - Pivot.x) + Canvas.Height / 2 + PosY) 。
左下角有2个小三角形,右下角有2个小三角形
此时,Image拥有 Left,PosY,Right,Height 这四个位置参数。
而且, 锚点的Pivot的X不起作用 。
Image的Width = (Canvas.Width - Left - Right) / 2 。
如果设置Image的Left,Right都为0的话,则Image的宽会与Canvas的宽一致。
Image所在坐标系原点在Canvas中的坐标 = (Image.Width / 2 + Left , Image.Height * (0.5 - Pivot.x) + Canvas.Height + PosY) 。
四锚点 ,从Unity上看,就是4个小三角形全都是分散的( 左下角、左下角、右上角、右下角 )。
此时,Image拥有 Left,Top,Right,Bottom 这四个位置参数。
而且, 锚点的Pivot不起作用 。
Image的Width = (Canvas.Width - Left - Right) / 2 。
Image的Height = (Canvas.Height - Top - Bottom) / 2 。
如果设置Image的Left,Top,Right,Bottom都为0的话,则Image的宽高会与Canvas的宽高一致。
Image所在坐标系原点在Canvas中的坐标 = (Image.Width / 2 + Left , Image.Height / 2 + Top) 。
屏幕坐标系与Canvas坐标系都是 左下角为原点,向右为X轴正方向,向上为Y轴正方向 。
在屏幕坐标系上有个点P(x, y),我们先把屏幕分辨率的宽高缩放到与Canvas的宽高一致,此时P点的坐标也会随着缩放。
因为屏幕坐标系与Canvas坐标系都是左下角为原点,所以缩放完成后的P的位置(记作P2),就是P点在Canvas坐标系上的位置。
P2 = (P.x * Canvas.Width / Screen.Width, P.y * Canvas.Height / Screen.Height)
现在有一个Image UI,我们先把该Image的锚点设置为左下角( Anchors.Min(0, 0),Anchors.Max(0, 0) ),然后把P2的位置赋值给Image的anchoredPosition,此时该Image刚好就在P点的位置。
在Canvas坐标系上有一个Image UI,我们先把该Image的锚点设置为左下角( Anchors.Min(0, 0),Anchors.Max(0, 0) ),然后把Canvas的宽高缩放到与屏幕分辨率的宽高一致,此时Image的anchoredPosition(记作P)也会随着缩放。
因为屏幕坐标系与Canvas坐标系都是左下角为原点,所以缩放完成后的Image的anchoredPosition(记作P2),就是Image在屏幕坐标系上的位置。
P2 = (P.x * Screen.Width / Canvas.Width, P.y * Screen.Height / Canvas.Height)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)