Unity世界坐标转换屏幕坐标 详解)
简介:我们先通过简单的操作实现一下基础的UI跟随物体移动的功能,首先我们在场景中建立一个Canvas并且添加一个图片作为
我们先通过简单的操作实现一下基础的UI跟随物体移动的功能,首先我们在场景中建立一个Canvas并且添加一个图片作为按钮,之后我们添加一个3d物体作为跟随目标,效果如下图所示
我们配置一下UICanvas的属性,书写对应的自定义类并添加至UI物体
接下来我们书写对应的代码
using UnityEngine; public class ClickItem : MonoBehaviour { public GameObject target; public Canvas parentCanvas; // Update is called once per frame private void Update() { transform.localPosition = GetScreenPosition(target.gameObject); } public Vector3 GetScreenPosition(GameObject target) { Vector3 viewportPos = Camera.main.WorldToViewportPoint(target.transform.position); RectTransform canvasRtm = parentCanvas.GetComponent(); Vector2 uguiPos = Vector2.zero; uguiPos.x = (viewportPos.x - 0.5f) canvasRtm.sizeDelta.x; uguiPos.y = (viewportPos.y - 0.5f) canvasRtm.sizeDelta.y; return uguiPos; } }这段代码中我们使用的是WorldToViewportPoint这个函数,WorldToViewportPoint函数在上篇文章中介绍过,屏幕左下角为(0,0),右上角为(1,1),由于我们要返回一个屏幕上的坐标,屏幕坐标是以中心点作为(0,0)点,所以我们需要再WorldToViewportPoint的返回值上再减去(0.5,菜叶说说,0.5),得到一个-0.5到0.5之间的数值,并且将这个数值乘以屏幕的宽度和高度(屏幕的宽度和高度可以由一个全局填充的Canvas的宽高来获取),我们运行项目,可以得到下面的效果,完全符合我们的需求,我们更改Canvas的Match属性,或者将Canvas的类型改为Camera(如果要使用Camera类型,对应的Camera应该改为正交模式,UI摄像机未来会详细介绍),发现结果都是正确的(有的小伙伴将Canvas类型改为Camera之后,发现图标不见了,这是因为改为Camera之后,UI就不会在最上层显示,会和其他物体按照position的Z值进行前后关系的遮挡)
现在我们测试一下另一个函数WorldToScreenPoint,WorldToScreenPoint是以屏幕的左下角为(0,0),右上角为(Screen.width, Screen.height),想要获取当前屏幕UI的真实的宽度和高度,接着对函数获取的x值和y值,根据宽高与屏幕宽度高度的比值进行处理,计算出最后的结果,具体代码如下
public Vector3 GetScreenPosition(GameObject target) { RectTransform canvasRtm = parentCanvas.GetComponent(); float width = canvasRtm.sizeDelta.x; float height = canvasRtm.sizeDelta.y; Vector3 pos = Camera.main.WorldToScreenPoint(target.transform.position); pos.x = width / Screen.width; pos.y = height / Screen.height; pos.x -= width 0.5f; pos.y -= height 0.5f; return pos; }下一篇我们要验证我们当前写法对于Editor和安装包是否都可以使用(Up上一期写的有一些问题,一些旧的写法比较麻烦,所以更新了一下代码,下一章会说一下当时犯的错误,大家一起进步😂)
贴一下其余几篇文章,方便大家阅读。
Unity世界坐标转换屏幕坐标(概览)_Unity鼓励师的博客-CSDN博客
Unity世界坐标转换屏幕坐标(测试)_Unity鼓励师的博客-CSDN博客
声明:本文内容仅代表作者个人观点,与本站立场无关。如有内容侵犯您的合法权益,请及时与我们联系,我们将第一时间安排处理
- 米兰后卫佳夫谈伊布、更衣室和成长:与伊布踢球疯狂,大教堂是我的
米兰后卫佳夫近日接受了德国天空体育记者的采访,谈到了自己在米兰的生活、加盟前与马尔蒂尼和马萨拉的视频通...
体育新闻 2023-05-08 01:02:36 - 皇马成为首支达成百冠的西班牙俱乐部,历史冠军分布展现辉煌历程
在2023年5月7日的国王杯决赛中,皇马以2-1的比分击败了奥萨苏纳,成功捧起了这一项西班牙足球比赛中的冠军奖杯。...
体育新闻 2023-05-07 10:47:13 - 米兰前锋莱奥遭意大利媒体记者极具争议的言论:甚至让他断腿!莱奥
最近,一则关于意甲球员莱奥的争议言论引发了广泛关注。意大利媒体sportitalia的记者Michele Criscitiello在一档节目中,...
体育新闻 2023-04-28 00:03:14 - 布斯克茨将接受巴萨续约报价,薪水大幅减少适应财务公平竞争?
据报道,巴塞罗那队的中场球员布斯克茨打算接受巴萨提出的续约报价,以继续留在球队一个赛季,并有可能再加一...
体育新闻 2023-04-27 21:55:43 - FIFA23公布英超最佳前锋阵容名单,曼城球员入选最多
英超、FIFA23、最佳阵候选、前锋、阿尔米隆、马丁内利、格拉利什、哈兰德、哈弗茨、凯恩、马赫雷斯、努涅斯、拉...
体育新闻 2023-04-18 06:40:54 - 海外票务网站公布首轮G1部分场次平均票价,国王主场迎战勇士最高
NBA季后赛将在4月17日正式开始,各支球队和球迷们都在紧张备战和期待中。而海外票务网站也在今天公布了首轮G1部分...
体育新闻 2023-04-15 05:10:48 - 曼联与诺丁汉森林交手记录 5场比赛
两支球队也将在2022年12月28日凌晨4点进行2022赛季的英超联赛,第17轮比赛,目前两支球队的近期状况,曼联会略高一...
体育新闻 2023-03-24 21:31:22 - 大概3000的预算,买switch还是ps4?
如果你是学生党,优先建议switch。为什么?现在国内switch群体庞大,数千万的switch玩家基数,总有一款适合你。swit...
体育新闻 2022-12-23 21:00:36 - 队友变对手,同效力大巴黎的姆巴佩与梅西迎来巅峰对决 冠军决赛)
梅西和姆巴佩都效力于大巴黎俱乐部,这两支顶级的足球队员在足球联赛中属于队友,但梅西和姆巴佩隶属于不同的...
体育新闻 2022-12-19 08:36:45 - 你认为老子《道德经》的精髓是什么?你是如何评价这部作品的?
世间要有道!人类要守自然和谐之道!道,无,发万物生死在其中,老子仿之,修掉有的负担,仿道的生,也就是修...
体育新闻 2022-12-18 13:12:34