将物体坐标转换到RawImage上的坐标

答案来源于https://answers.unity.com/questions/1823238/how-do-i-convert-gameobjects-position-to-position.html

//先将物体的世界坐标转化成相机的视口坐标,viewPos即为坐标占屏幕的比例
 Vector3 viewPos = camera.WorldToViewportPoint(obj.transform.position);
//将比例和设置的Canvas分辨率相乘得到屏幕坐标
Vector3 screenPos = viewPos.Scale(new Vector3(Screen.width,Screen.height,1f));

transform.position = screenPos;

以物体在RawImage上的坐标举例:
实现效果:
当场景中的空物体在正方体的这个位置时,空物体在RawImage上的位置如图所示(在UI上用Button代表空物体的位置):
在这里插入图片描述

在这里插入图片描述

实现原理:
先将物体的世界坐标通过WorldToViewportPoint()转化成视口坐标,用视口坐标乘canvas的宽高,得到物体在canvas上的坐标,再根据RawImage在canvas中的位置进行宽高的缩放,获得物体在RawImage上的坐标

实现代码:

	 private void SetPos(GameObject obj)
    {
        Vector3 viewPos = camera.WorldToViewportPoint(obj.transform.position);
        Debug.Log("viewPos:" + viewPos);
        viewPos.Scale(new Vector3(Screen.width, Screen.height, 1f));
        viewPos = new Vector3(rawImage.rect.width / Screen.width * viewPos.x + (Screen.width - rawImage.rect.width) / 2, 
        					  rawImage.rect.height / Screen.height * viewPos.y + (Screen.height - rawImage.rect.height) / 2, 
        					  viewPos.z);
        Debug.Log("viewPos2:" + viewPos);
        transform.position = viewPos;
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值