1、世界坐标转屏幕坐标
/// <summary>
/// 世界坐标转屏幕坐标
/// </summary>
/// <param name="parentRect"></param>
/// <param name="worldPoint">世界坐标下的三维点位</param>
/// <param name="offset">偏差值</param>
/// <returns>目标二维坐标值</returns>
public Vector2 WorldPosToScreenPos(RectTransform parentRect,Vector3 worldPoint,Vector2 offset)
{
Vector2 anchoredPosition;
Vector2 screenPosition = mainCamera.WorldToScreenPoint(worldPoint);
RectTransformUtility.ScreenPointToLocalPointInRectangle(parentRect, screenPosition, mainCanvas.worldCamera, out anchoredPosition);
return anchoredPosition + offset;
}
2、三维位置实时映射到二维画布上
三维地图上某位置坐标,映射到屏幕画布上显示,在画布上的位置随三维沙盘移动而动;
/// <summary>
/// 三维地图上点,映射在屏幕画布上的poi点位的动态更新
/// </summary>
/// <param name="parentRect">点位的父物体</param>
/// <param name="rectTransform">点位本身</param>
/// <param name="point">点位对应三维沙盘上的位置</param>
/// <param name="offset">偏移值</param>
/// <returns></returns>
protected IEnumerator UpdatePosition(RectTransform parentRect, RectTransform rectTransform, Vector3 point, Vector2 offset)
{
Vector2 anchoredPosition;
while (true)
{
//三维沙盘上的位置对应画布上的位置
Vector2 screenPosition = mainCamera.WorldToScreenPoint(point);
RectTransformUtility.ScreenPointToLocalPointInRectangle(parentRect, screenPosition, mainCanvas.worldCamera, out anchoredPosition);
rectTransform.anchoredPosition = anchoredPosition + offset;
yield return null;
}
}
——————————————— 2022-04-23———————————————————
3、二维画布坐标转三维沙盘坐标
/// <summary>
/// 二维画布坐标转三维沙盘坐标
/// </summary>
/// <param name="targetPos2d"></param>
/// <returns></returns>
public Vector3 ScreenToWorldPos(Vector2 targetPos2d)
{
Ray ray = mainCamera.ScreenPointToRay(targetPos2d);
RaycastHit hit;
Physics.Raycast(ray, out hit, 500000);
return hit.point;
}
4、鼠标点击屏幕的点/鼠标位置转换为世界坐标
//通过射线检测,获取鼠标点击位置的世界坐标
public void GetMouseWorldPos()
{
if (Input.GetMouseButtonDown(0))
{
Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
//射线检测,第三个参数可根据需求设置或不设置,具体看api;
Physics.Raycast(ray, out hit, 500000);
Vector3 mousePos = hit.point;
}
}
//直接把鼠标位置转化为世界坐标
public void GetMousePos () {
//获取鼠标在屏幕上的坐标
Vector3 mousePosition = Input.mousePosition;
//屏幕坐标转世界坐标,z轴值不能为0,否则转换失败
Vector3 mouseWorldPos = mainCamera.ScreenToWorldPoint (new Vector3(mousePosition.x, mousePosition.y, 10.0f));
}