3D Unity对象在地形

时间:2017-07-13 02:59:01

标签: unity5

所以我知道如何实例化一个对象;但是,我创建了一个不平坦的地形,并在所有对象上实现物理。我将在地点产生物体,但它们需要在地形之上(而不是上方)进行初始化。我可以使用来自非常高的y轴位置的光线投射并向下投射以查看与地形的交点,然后使用该位置+对象y维度的一半(使其位于地形的顶部);然而,地形形状奇特,如果我要把物体放在上面的地形是凹形向上的形状,我创造的物体的一部分将在地下。我一直在想的另一种方法是在地形上方稍微创建一个物体,并允许重力将其降低到它自然地位于地形顶部的高度;然而,这很糟糕......我希望它能立竿见影,而且我认为应该有更好的方法来做到这一点,而不是我的想法。

ASCII绘图:

       ______
      |      |
      |      |
      |______|
         |
-        |
  -      |     -
    -    |    -
      -  |   -
      * -V  -*
          --

Box表示对象,下面的连字符表示下面的地形。 *表示物体与地形的潜在重叠体积。

上面以“V”结尾的行表示光线投射。它检查该特定点的高度,因为它仅将Vector3作为输入。如果我放置对象(带有偏移量)以使对象的底部表面接触“V”下方的点,则下边缘仍将穿过地形。

1 个答案:

答案 0 :(得分:0)

我不确定你要删除的对象的实际形状是什么,但可能的解决方案是想象一个包围整个对象的边界框(或实际创建一个)。然后,您可以从每个底角投射光线,并使用这4条光线的地形上的最高点来确定放置对象的位置。实现这一目标的一种方法是获取对象的-y范围,并从+ x / + z,+ x / -z,-x / -z,-x / + z范围进行投影。
这当然可能不是所有物体形状(如颠倒锥体)的最准确解决方案,但希望引导您朝着正确的方向前进!

另一种(更简单但可能更脏)的方法是像以前一样放置物体,检查碰撞,如果物体仍然碰撞一点点,再次检查碰撞,并继续这样做直到不再发生碰撞了。