unity UGUI之获取UI子节点在Canvas的2D坐标(一)

本文介绍了在Unity UGUI中如何将屏幕坐标转换为UI子节点在Canvas的2D坐标。内容涉及到transform.position与rectTransform.anchoredPosition的区别,以及在复杂UI结构下如何进行坐标转换。通过理解世界坐标和2D相对坐标,结合Canvas和UI摄像机,可以实现坐标转换并更新UI显示位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在做unityUGUI时,经常会遇到屏幕坐标转换为ugui坐标,前段时间项目需求鼠标点击屏幕遥杆就在手指点击的位置,会有屏幕左边转化为UGUI坐标来实现,今天想大家分享一下坐标转换,这段时间主要是对UGUI问题以及优化进行详解。如下图所示,UI比较复杂了子节点会很多,假设我想获取某个子的子节点的2D坐标。

首先我们要搞清楚 transform.postion 和 rectTransform.anchoredPosition  这两个坐标是完全不一样的。前面的是3D坐标,后面的是2D在Rect里的坐标,并且还是相对坐标,那么节点深了坐标就更不好换算了。

public Canvas canvas;
void Start()
{
	Vector2 pos;
	if(RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as RectTransform, transform.position, canvas.camera, out pos))
    {
		Debug.Log(pos);
	}
 
}

所以上述代码就是用UI元素的世界坐标和canvas的RectTrasform再加上UI摄像机,换算出元素在Canvas的2D坐标

最后在想需要赋值的UI 用 rectTransform.anchoredPosition = pos 就可以了。。

今天有朋友问我,怎么通过鼠标的坐标在屏幕上移动来更新UI的显示位置。代码如下

using UnityEngine;
using System.Collections;
 
public class NewBehaviourScript : MonoBehaviou
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值