繁体   English   中英

始终在网格单元的表面上移动 C#

[英]Always move on surface of the mesh unity C#

我有一个立方体,我想始终在网格表面上移动它。 就像我在表面上有一个目的地,玩家想要 go 但它应该 go 到目的地而不离开网格。 喜欢它 go 沿着网格的表面。 我知道我可以像这样向目的地移动:

   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();
        }

    }

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

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

  1. 使用物理:将刚体/对撞机附加到立方体/网格并使用AddForce 之类的东西
  2. 将每帧移动立方体添加到目标并在运行时计算 position。 如果您有计算高度的公式(例如,如果您从噪声生成网格或它只是球体) - 您可以使用公式,在其他情况下,您可以将MeshCollider添加到网格和每帧网格/立方体的RayCast接触点 + 正确的立方体position
  3. 如果网格不是无穷无尽的,您可以使用Unity Nav Mesh 系统- 这将是解决复杂任务的最简单方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM