提问人:Operator 提问时间:11/3/2023 更新时间:11/4/2023 访问量:53
使用Instantiate添加时如何重新计算对象的位置?(团结)
How to recalculate the position of an object when adding using Instantiate? (Unity)
问:
我对物体的局部和世界坐标完全感到困惑。 我有一个对象的层次结构,如下所示:
我将带有先前保存位置(例如 Vector3(10f, 10f, 10f))的 LeftTargetPrefab 添加到 BallsPath,并且设置正确。但是,如果我尝试将 LeftTargetPrefab 添加到 BallTargets,则位置也会设置为 Vector3(10f, 10f, 10f)。如果在启动游戏时,我创建了 LeftTargetPrefab 的克隆并将其拖到 BallsTarget 中,则坐标会正确转换为局部坐标。如何确保在通过 Instantiate 添加到 BallsTarget 时,LeftTargetPrefab(Clone) 位置立即正确重新计算为本地位置?
答:
评论后更新:
要实例化相对于新父级的对象,请使用 .此调用使用布尔值来设置对象相对于其新父级的位置,请参阅下面提到的链接。Instantiate(originalObject, parentTransform, false
instantiateInWorldSpace
另一件事:在你的形象中,是 .所以它的坐标已经不再是世界坐标了,而是相对于它的父级。LeftTargetPrefab
BallsPath
当您说“使用以前保存的位置添加 LeftTargetPrefab”时,这是否发生在运行时的脚本中?
您可以尝试 Object.Instantiate 的选项。为此,您将通过父级进行实例化(在这种情况下,我猜)。instantiateInWorldSpace
Transform
BallsTarget
另一种选择是通过父对象的 etc 传递父对象的位置和可能的局部坐标偏移量。Transform.localPosition
评论
target = Instantiate(_leftTargetPrefab, BallsTarget.Transform, false
BallsTarget
ballPattern.leftTargetPosition
评论