Unity 坐标转换


如图是场景中的布局,Playerpool都是空物体,用来当做物体的parent的,这里这两个的位置不重要(不在一起也没有问题),player下的ABC是三层父物体,D是一个小球,在C下面,现在我想在pool下面生成一个cube,位置和D一样,需要用到坐标转换 此处为pool.InverseTransformPoint(D的世界坐标),代码如下

public class test : MonoBehaviour
{
    // 在parent下生成一个物体,位置和D所在的位置
    public Transform D;
    public Transform pool;
    void Start()
    {
        // D的世界坐标转换为相对于Parent的本地坐标
        Vector3 Pos = pool.InverseTransformPoint(D.position);
		// 创建一个cube,生成在指定位置
        GameObject ga = GameObject.CreatePrimitive(PrimitiveType.Cube);
        ga.transform.localScale = Vector3.one * 0.1f;
        ga.transform.SetParent(pool);
        ga.transform.localPosition = Pos;
    }

}

效果如下
在这里插入图片描述
自己的理解是 把D这个子物体相对于世界的位置记录下来,再放到pool这个空间中,因为相对位置固定,所以生成的位置会叠在一起


UI坐标转换
需求是把B挪到A所在的位置,且不改变父物体,很常见的需求
在这里插入图片描述

public class Testt : MonoBehaviour
{
    public RectTransform BParent;
    public RectTransform A;
    public RectTransform B;
    void Start()
    {
        // 把A的世界坐标先转屏幕坐标
        Vector3 screenPos = Camera.main.WorldToScreenPoint(A.position);
        // 把A的屏幕坐标转成B的UI坐标
        RectTransformUtility.ScreenPointToLocalPointInRectangle(BParent, screenPos, Camera.main, out Vector2 localPoint);
        B.anchoredPosition = localPoint;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值