unity游戏自定义分辨率

unity游戏自定义分辨率,第1张

1、打开Unity,新建一个空工程,Unity界面。

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)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11072229.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存