You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中使用Instantiate添加对象到父物体时如何正确转换坐标?

解决Unity实例化对象时局部坐标/世界坐标转换问题
  • 问题核心:Unity的Instantiate重载方法中,若直接指定父物体,传入的position会被识别为父物体的局部坐标;但手动拖动物体到父物体下时,Unity会自动保留物体的世界位置,并同步转换为父物体的局部坐标。要实现和手动拖拽一致的效果,有两种直接方案:

方法一:先实例化再设置父物体(逻辑更直观,推荐)

先以目标世界坐标实例化对象,再设置父物体并保持世界位置不变:

// 按设定的世界坐标实例化,暂不指定父物体
GameObject targetClone = Instantiate(LeftTargetPrefab, new Vector3(10f, 10f, 10f), Quaternion.identity);
// 设置父物体,同时保持当前世界位置(第二个参数设为true)
targetClone.transform.SetParent(BallTargets.transform, worldPositionStays: true);

这么处理后,对象会保持你设定的(10,10,10)世界位置,同时自动转换为BallTargets的局部坐标,和手动拖拽的效果完全一致。

方法二:提前转换坐标再实例化

先把目标世界坐标转换成BallTargets的局部坐标,再用带父物体的重载方法实例化:

// 将目标世界坐标转换为BallTargets的局部坐标
Vector3 localPosition = BallTargets.transform.InverseTransformPoint(new Vector3(10f, 10f, 10f));
// 以计算好的局部坐标实例化并绑定父物体
GameObject targetClone = Instantiate(LeftTargetPrefab, localPosition, Quaternion.identity, BallTargets.transform);

该方法提前算出对应局部坐标,直接传入实例化方法,最终效果和方法一相同。

内容的提问来源于stack exchange,提问作者Operator

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 10:32:42