Unity 3D - 屏幕坐标转化

当Canvas的RenderMode设置为Camera模式
普通屏幕坐标转化就失效了,因为UI坐标原点变成屏幕中心.
所以需要把3D坐标转化成屏幕坐标,然后把屏幕坐标转化成本地坐标.
在这里插入图片描述

public class WorldPosToScreenPos : MonoBehaviour
{

    //3d世界目标对象
    public GameObject targetGo;
    //3d摄像机
    public Camera cameraMain;
    //UI摄像机
    public Camera CameraUI;

    public Image img;
    private void Update()
    {
        
        Vector3 targetPos = targetGo.transform.position;
        //求出屏幕坐标
        var screenPos = RectTransformUtility.WorldToScreenPoint(cameraMain, targetPos);

        //将屏幕坐标转化为RectTransform的本地坐标
        RectTransform parentRectTransform = img.transform.parent.GetComponent<RectTransform>();
        RectTransformUtility.ScreenPointToLocalPointInRectangle(parentRectTransform, screenPos, CameraUI, out var localPos);
        
        img.rectTransform.anchoredPosition = localPos;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值