camera.ScreenToWorldPoint

本文介绍了如何使用camera.ScreenToWorldPoint方法将屏幕坐标转换为世界坐标,并强调了正确设置Z值的重要性,该值应为摄像机到目标平面的投影距离。

camera.ScreenToWorldPoint(Input.mousePosition+new Vector3(0, 0, (xxx))),将屏幕坐标转换为世界坐标,但必须赋z值,z值应为摄像机到该点所在平面的投影

这个API必须赋值z,否则就没用,比如:你使用camera.ScreenToWorldPoint(Input.mousePosition)那么转化出来的结果是一样的,得到的结果就是摄像机的位置坐标。
所以在使用这个API时候,一定要注意加上z值,这个值就是摄像机位置到摄像机剪裁平面的距离,如果z值是0.3就是刚好和剪裁平面重合的位置。大于0.3就能在摄像机的范围内
在这里插入图片描述

using UnityEngine; /// <summary> /// 坐标转换工具 /// </summary> public static class CCUtils { /// <summary> /// 世界坐标转屏幕坐标 /// </summary> public static Vector2 World2Screen(Vector3 v, Camera camera = null) { if (camera == null) { camera = Camera.main; } Vector3 worldPos = v; Vector3 pos = camera.WorldToScreenPoint(worldPos); return pos; } /// <summary> /// 屏幕坐标转世界坐标 /// </summary> public static Vector3 Screen2World(Vector2 v, Camera camera = null) { if (camera == null) { camera = Camera.main; } Vector3 screenPos = new Vector3(v.x, v.y, -camera.transform.position.z); Vector3 pos = camera.ScreenToWorldPoint(screenPos); return pos; } /// <summary> /// 世界坐标转视口坐标 /// </summary> public static Vector2 World2Viewport(Vector3 v, Camera camera = null) { if (camera == null) { camera = Camera.main; } Vector3 worldPos = v; Vector3 pos = camera.WorldToViewportPoint(worldPos); return pos; } /// <summary> /// 视口坐标转世界坐标 /// </summary> public static Vector3 Viewport2World(Vector2 v, Camera camera = null) { if (camera == null) { camera = Camera.main; } Vector3 viewportPos = new Vector3(v.x, v.y, -camera.transform.position.z); Vector3 pos = camera.ViewportToWorldPoint(viewportPos); return pos; } /// <summary> /// 屏幕坐标转视口坐标 /// </summary> public static Vector2 Screen2Viewport(Vector2 v, Camera camera = null) { if (camera == null) { camera = Camera.main; } Vector3 screenPos = v; Vector3 pos = camera.ScreenToViewportPoint(screenPos); return pos; } /// <summary> /// 视口坐标转屏幕坐标 /// </summary> public static Vector2 Viewport2Screen(Vector2 v, Camera camera = null) { if (camera == null) { camera = Camera.main; } Vector3 viewportPos = v; Vector3 pos = camera.ViewportToScreenPoint(viewportPos); return pos; } /// <summary> /// 屏幕坐标转UI坐标 /// </summary> public static Vector2 Screen2UI(Vector2 v, RectTransform rect, Camera camera = null) { Vector2 pos; RectTransformUtility.ScreenPointToLocalPointInRectangle(rect, v, camera, out pos); return pos; } /// <summary> /// 世界坐标转UI坐标 /// </summary> public static Vector2 World2UI(Vector3 v, RectTransform rect, Camera uiCamera, Camera worldCamera = null) { if (worldCamera == null) { worldCamera = Camera.main; } Vector2 screenPos = World2Screen(v, worldCamera); Vector2 pos = Screen2UI(screenPos, rect, uiCamera); return pos; } }
最新发布
10-30
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值