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

Unity中无需添加对象,如何获取相对于父物体的本地坐标?

无需实例化对象获取Unity父物体本地坐标的方法

完全可以不用实例化对象,直接计算目标坐标相对于父物体的本地坐标。

当前代码结果不匹配的可能原因

你调用SetParent(_ballsParent, false)时,会保持对象的世界位置不变,此时对象的localPosition理论上应该等于_ballsParent.InverseTransformPoint(leftTargetPosition)。如果结果不匹配,大概率是以下两种情况:

  • leftTargetPosition并非世界空间坐标,而是其他局部空间的坐标值
  • 父物体_ballsParent存在非均匀缩放(x/y/z轴缩放比例不一致),InverseTransformPoint在这种场景下会产生偏差

正确的计算方法

根据父物体的缩放情况,选择对应的计算方式:

父物体为均匀缩放

直接使用InverseTransformPoint即可得到正确的本地坐标:

Vector3 localPos = _ballsParent.InverseTransformPoint(leftTargetPosition);

该方法会将世界坐标转换为父物体的本地坐标,同时考虑父物体的位置、旋转和均匀缩放。

父物体存在非均匀缩放

此时InverseTransformPoint的结果可能不符合预期,建议直接使用世界转本地矩阵计算:

Matrix4x4 worldToLocalMatrix = _ballsParent.worldToLocalMatrix;
Vector3 localPos = worldToLocalMatrix.MultiplyPoint3x4(leftTargetPosition);

矩阵运算能更精准地处理非均匀缩放场景下的坐标转换。

结果验证

如果想确认计算结果是否正确,可以在实例化对象后做对比:

Transform target = Instantiate(_leftTargetPrefab, leftTargetPosition, Quaternion.identity);
target.SetParent(_ballsParent, false);
Debug.Log(localPos == target.localPosition);

内容的提问来源于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 06:22:42