始终在网格统一C#的表面上移动

时间:2019-10-07 11:29:57

标签: c# unity3d

我有一个立方体,我想一直在网格物体的表面上移动。就像我在玩家想要去的表面上有一个目的地,但它应该不离开网格就去目的地。像它沿着网格的表面。我知道我可以这样前往目的地:

   IEnumerator MoveToDirection(Vector3 startPosition, Quaternion orientation, Transform planet)
    {
        GameObject go = GameObject.CreatePrimitive(PrimitiveType.Cube);
        go.transform.rotation = orientation;
        go.transform.position = startPosition;

        while (true)
        {
            go.transform.position=  go.transform.position + go.transform.up * Time.deltaTime* speed;

            yield return new WaitForEndOfFrame();
        }

    }

但是不知道如何限制它不应该离开网格的表面。

1 个答案:

答案 0 :(得分:1)

有3种方法可以达到这种效果:

  1. 使用物理学:将刚体/碰撞器附加到立方体/网格上并使用类似AddForce
  2. 将每个移动框添加到目标,并在运行时计算位置。如果您有公式来计算高度(例如,如果是根据噪声生成的网格,或者只是球体),则可以使用公式,在其他情况下,可以将MeshCollider添加到网格中,并RayCast接触点每帧网格/立方体+正确的立方体位置
  3. 如果网格不是无限的,则可以使用Unity Nav Mesh system-这是解决复杂任务的最简单方法。