Unity UGUI怎么样获得UI在屏幕上的位置坐标?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity UGUI怎么样获得UI在屏幕上的位置坐标?相关的知识,希望对你有一定的参考价值。

使用 RectTransformUtility.ScreenPointToLocalPointInRectangle 方法。

public Vector2 CurrMousePosition(Transform thisTrans)

Vector2 vecMouse;

RectTransform parentRectTrans = thisTrans.parent.GetComponent<RectTransform>();

RectTransformUtility.ScreenPointToLocalPointInRectangle(parentRectTrans, Input.mousePosition, UICamera, out vecMouse);

return vecMouse;

Unity  是实时3D互动内容创作和运营平台 。包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助Unity将创意变成现实。 Unity平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。

参考技术A

直接用WorldToScreenPoint方法

[csharp] view plain copy

    public Camera mycamera;//要转化到的目的摄像机,通常canvas在这个摄像机下(即canvas的render mode设置为这个摄像机)  

    Image kongjian;//自己要获取屏幕坐标的控件,可以是image,也可以是button等等  

    float x=mycamera.WorldToScreenPoint(kongjian.transform.position).x;  

    float y=mycamera.WorldToScreenPoint(kongjian.transform.position).y;  

    //x,y即为控件在屏幕的坐标camera.WorldToScreenPoint()方法返回的是一个position类型 是vector3类型,camera为要转化到的目标摄像机,传入的参数为控件的世界坐标  

以下会发现得到的值不尽如人意,原因在于,这些
GetComponent<RectTransform>().sizeDelta
或者GetComponent<RectTransform>().rect.size
GetComponent<RectTransform>().sizeDelta
或者GetComponent<RectTransform>().rect.size
方法得到的宽高受到(相对于父物体)锚点的影响,所以楼主自行测试一下就会得到自己想要的答案.

Unity UGUI 自适应的个人理解

  我们多少应该都遇到过,做好的游戏打包出来后,某些 UI 元素的位置全都乱了。出现这种情况是因为:在进行 UI 元素摆放的时候没有考虑到在不同分辨率下,UI 元素的位置变动,没有对它们进行针对性的修改和调整。

1、所谓的自适应

  a.保持相对位置不变

  比如将 UI 设计在屏幕的右上角,那么在各种的分辨率下都应该在右上角

  b.保持宽高比例不变

  由于分辨率有很多种,所以保持宽高等比例缩放是做不到的,要么是宽拉伸缩放的程度大一些,要么是高拉伸缩放的程度大一些

2、相对位置

  在 UGUI 中,可以通过设置 UI 的锚点来设置 UI 的相对位置。

3、缩放比例

  在 UGUI 中,可以通过设置 Canvas 下的 Canvas Scaler 来设置 UI 的缩放比例(Canvas 下的 Canvas 是用来处理 UI 遮挡关系的)

4、Canvas Scaler 组件

  UI Scaler Mode 一共有三个选项: Constant Pixel SizeScale With Screen SizeConstant Physical Size

  技术图片

  a.当 UI Scale Mode 为 Constant Pixel Size 时

UI 在任何分辨率下都不会进行缩放拉伸,只有通过改变 Scale Factor 才会进行缩拉,因此不推荐使用这种模式(而这种模式的优点就是你可以通过写自适应算法来改变 Scale Factor 的值,代替 unity 的自适应算法)

  b.当 UI Scale Mode 为 Scale With Screen Size 时

相当于使用 unity 的自适应算法,此时 unity 会根据屏幕分辨率自动调节 Scale Factor 的值。一般要先选择一种比较主流的分辨率(即比较多的机型都采用的分辨率)进行 UI 的设计,例如采用 1920x1080,在这里就是设置了 Reference Resolution 的值。

  c.当 UI Scale Mode 为 Constant Physical Size 时

无论屏幕大小和分辨率如何,UI 元素都保持相同的物理大小,因此这种模式也不适合做自适应。

5、屏幕匹配模式

  Screen Match Mode 有三种屏幕匹配模式:Match Width or HeightExpandShrink

  技术图片

  a.Match Width Or Height

当值为 0,即处于 Width 那端时,表示屏幕高度对于 UI 大小完全没有任何影响,只有宽度会对 UI 大小产生影响。例如设置屏幕为 800*600,然后改变为800*300,屏幕高度变小了,但 UI 并没有进行缩拉;同理当值为 1,即处于 Height 那端时,表示屏幕宽度对于 UI 大小完全没有任何影响,只有高度会对 UI 大小产生影响。

  b.Expand

意思就是尽可能地使 UI 拉伸来适应屏幕。例如,设计了一个宽高为 200*100 的 Button,即宽高比为 2:1,放在 4:3 的屏幕内;然后把这个 Button 放在 16:9 的屏幕内,显然,此时 Button 是不能进行等比例的缩放的,也就无法保持 2:1 的宽高比了。

  c.Shrink

  同理,也是尽可能地使 UI 进行缩放来适应屏幕。

6、一般设置

  各个 UI 元素选择相应的锚点

  Canvas Scaler 选择 Scale With Screen Size

  Screen Match Mode 选择 Match Width Or Height,比例设为 1,也就是只和高度进行适配

  技术图片

以上是关于Unity UGUI怎么样获得UI在屏幕上的位置坐标?的主要内容,如果未能解决你的问题,请参考以下文章

unity UGUI如何获取鼠标指针所在位置的UI对象

Unity UGUI 自适应的个人理解

Unity笔记UGUI物体的Rect Transform组件(Pivot中心点,Anchor锚点)

Unity3D UGUI组件跟随鼠标运动

Unity3d UGUI基于屏幕尺寸的自适应

Unity笔记关于UGUI的根节点Canvas