UGUI世界转屏幕坐标

方法一:
Vector2 pos;
RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as
RectTransform,
Camera.main.WorldToScreenPoint(wordPos), canvas.worldCamera, out pos);
RectTransform rect = transform.transform as RectTransform;
uiRect.anchoredPosition = pos;

 

 

 

 

第一:将UI的锚点设为左下角,有的UI无法设置锚点是因为你的该组件或该组件的父物体没有添加
RecTransform组件,添加该组件后调整它的锚点为左小脚;
CanvasScaler 参数设置:Scale With Screen Size

第二:调用以下代码来转换坐标
/// <summary>
/// 世界坐标转UI屏幕坐标
/// </summary>
/// <param name="wordPosition"></param>
/// <returns></returns>
public static Vector2 WordToScenePoint(Vector3 wordPosition)
{
CanvasScaler canvasScaler = GameObject.Find
("Canvas").gameObject.GetComponent<CanvasScaler>();

float resolutionX = canvasScaler.referenceResolution.x;

float resolutionY = canvasScaler.referenceResolution.y;

float offect = (Screen.width / canvasScaler.referenceResolution.x) * (1 -
canvasScaler.matchWidthOrHeight) + (Screen.height / canvasScaler.referenceResolution.y) *
canvasScaler.matchWidthOrHeight;

Vector2 a = RectTransformUtility.WorldToScreenPoint(Camera.main, wordPosition);

return new Vector2(a.x / offect, a.y / offect);;
}
第三:将上步计算的Vector2赋给UI组件
mImageTargeRec.anchoredPosition = WordToScenePoint(wordPosition);

posted on 2019-02-27 21:58  年轮下的  阅读(408)  评论(0编辑  收藏  举报

导航