c# - TransformPoint() 方法附加到哪个对象的变换重要吗?

标签 c# unity-game-engine transform

什么对象变换 TransformPoint() 重要吗?方法附加到,因为它应该返回世界空间位置?例如给出以下结构:

  • 对象1

    • ChildObj1
  • 对象2

执行 Obj1.transform.TransformPoint(Obj2.transform.position) 应该返回与 ChildObj1.transform.TransformPoint(Obj2.transform.position) 相同的结果,无论Obj1 和 ChildObj1 的位置。

这是正确的吗?如果是这样,我错过了什么?为什么 TransformPoint 必须附加到对象的变换上?

最佳答案

TransformPoint接受一个 Vector3 并返回一个 Vector3。它所做的只是将一个点从本地空间转换为世界空间。由于您的示例显示 Obj2 不是 Obj1 的子项,因此可能会产生混淆。

让我们说以下内容:

  • Obj1 位于世界位置 (5,0,0)
  • ChildObj1 在世界位置中位于 (8,0,0),在本地位置中位于 (3,0,0)(因为它比 Obj1 高 3 个 x 单位。
  • Obj2 位于世界位置 (6,0,0)

以下是针对上述场景的代码:

Vector3 point1 = Obj1.transform.TransformPoint(Obj2.transform.position);  
//point1 = (11,0,0)
Vector3 point2 = ChildObj1.transform.TransformPoint(Obj2.transform.position) 
//point2 = (14,0,0)

这里要注意的重要一点是,transform.position 返回世界位置。如果您要使用transform.LocalPosition,其中 Obj2 是根对象 (localPosition = 0,0,0),那么结果将是:

Vector3 point1 = Obj1.transform.TransformPoint(Obj2.transform.localPosition);  
//point1 = (5,0,0)
Vector3 point2 = ChildObj1.transform.TransformPoint(Obj2.transform.localPosition) 
//point2 = (8,0,0)

关于c# - TransformPoint() 方法附加到哪个对象的变换重要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59885462/

相关文章:

c# - 在 Unity 中将盒子碰撞器缩放到 Canvas 中的图像

jquery - 在 IE8 及更早版本上支持 css3 旋转和缩放

c# - 如何防止垂直滚动条在控件中占用空间,导致水平滚动条?

java - dispatchKeyEvent 在 Unity 中不触发 - native Android 插件

c# - 类型转换无法正常工作(arduino IDE)

unity-game-engine - Unity 5 中的 UnityScript "generic functions"

pandas - 在数据框中使用带有条件的变换

在 R 中使用 dplyr reshape 表格

c# - 将哈希表绑定(bind)到 WPF 组合框

c# - 未使用 EF 代码优先方法映射表