【问题标题】:Snap to a rotating grid in c#捕捉到 C# 中的旋转网格
【发布时间】:2021-11-23 12:23:08
【问题描述】:

我正在尝试制作一个可以将对象捕捉到网格的东西。目前我有这个代码

float x = Mathf.Round(selected.position.x / gridScale) * gridScale;
float y = Mathf.Round(selected.position.y / gridScale) * gridScale;
Vector3 gridPos = new Vector3(x, y, 0);

但它不起作用,因为网格的底部会旋转,这会导致捕捉位置发生偏移。如何使它在旋转时可以正确捕捉到网格?

【问题讨论】:

  • 是否可以选择将此对象作为旋转对象的子对象?这样,您将捕捉到本地空间中的网格,但任何旋转和父对象平移也将自动应用于子对象;)
  • 不,也许我没有说清楚,但问题是在创建对象时,一旦创建它就可以很好地旋转,但是当网格旋转时试图将其捕捉到网格上
  • 如前所述:如果它是网格的子节点,则没关系.. 计算 本地空间 中的位置,以便在父对象坐标中与父对象的增量空间......你根本不必关心任何旋转;)

标签: c# unity3d math rotation


【解决方案1】:

最简单的方法是使对象成为网格的子对象。这样,对象就会随着网格旋转。

但是,有时这是不可能的。在这些情况下,您可以向对象添加一个称为位置约束的组件。

您的对象将遵循您放入源中的变换。

如果您希望对象在旋转时停留在网格上的特定位置,您可以将一个空的 GameObject 添加到网格中,然后将该对象作为源添加到对象的位置约束中。

如果您希望对象的旋转与网格的旋转匹配,您还可以添加一个功能类似的旋转约束,但此时您真的想知道为什么您不只是让对象成为父对象的子对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-23
    • 2017-06-09
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多