unity优化Unity技术分享Unity 3D 学习笔记

Unity中世界坐标转UGUI坐标

2018-02-02  本文已影响23人  生活知识研习所

经常会遇到将ui元素的位置对应到某个世界坐标位置的需求,网上看了些解决办法,感觉太过复杂,也试过直接用Camera的WorldToScreenPoint方法和RectTransformUtility.ScreenPointToLocalPointInRectangle方法,结果都不对,后来仔细想想,UGUI元素都是放在Canvas中显示的,而Canvas的尺寸是根据CanvasScler中的设置来适配实际的屏幕分辨率的,并不一定会等于Screen的分辨率,刚好想到,Unity中ViewPort的尺寸大小是0-1,如果用ViewPort的坐标值来乘以Canvas的尺寸值不是就刚好得到世界坐标在UGUI坐标系中的位置了吗?

转换过程为

世界坐标-》ViewPort坐标-〉UGUI坐标

代码如下

public static Vector2 WorldToUGUIPosition(RectTransform canvasRectTransform,Camera camera,Vector3 worldPosition){

//世界坐标-》ViewPort坐标   

Vector2 viewPos = camera.WorldToViewportPoint(worldPosition);

//ViewPort坐标-〉UGUI坐标

  return new Vector2(canvasRectTransform.rect.width * viewPos.x, canvasRectTransform.rect.height * viewPos.y);

}

使用方法如下:

uiObject.localPosition = WorldToUGUIPosition(canvasRect, mainCamera, worldPosition);

上一篇 下一篇

猜你喜欢

热点阅读