【问题标题】:Can't get 3d objects to stop from overlapping无法让 3d 对象停止重叠
【发布时间】:2021-04-02 19:37:11
【问题描述】:

根据 Sebastian Lague 在 Youtube 上的播放列表,我最近完成了关于 A* 寻路的项目。但是,我相信他也是如此,我无法让寻求者(它们是胶囊)相互进入。当我给它们刚体时,它几乎起作用了,但随后它们开始到处传送并且通常非常有问题。

这是使搜索者遵循找到的最短路径的协程:

IEnumerator FollowPath()
{
    bool followingPath = true;
    int pathIndex = 0;
    transform.LookAt(path.lookPoints[0]);

    float speedPercent = 1;

    while (followingPath)
    {
        Vector2 pos2D = new Vector2(transform.position.x, transform.position.z);
        while (path.turnBoundaries[pathIndex].HasCrossedLine(pos2D))
        {
            if (pathIndex == path.finishLineIndex)
            {
                followingPath = false;
                break;
            }
            else
            {
                pathIndex++;
            }
        }

        if (followingPath)
        {
            if (pathIndex >= path.slowDownIndex && stoppingDst > 0)
            {
                speedPercent = Mathf.Clamp01(path.turnBoundaries[path.finishLineIndex].DistanceFromPoint(pos2D) / stoppingDst);
                if (speedPercent < 0.01f)
                {
                    followingPath = false;
                }
            }

            Quaternion targetRotation = Quaternion.LookRotation(path.lookPoints[pathIndex] - transform.position);
            transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, Time.deltaTime * turnSpeed);
            transform.Translate(Vector3.forward * Time.deltaTime * speed * speedPercent, Space.Self);
        }
        yield return null;
    }
}

让他们前进的是transform.Translate() 方法接近尾声。如果有人可以帮助我解决这个问题,我将不胜感激。如果我应该包含更多代码部分,请告诉我。

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    transform.Translate() 只是移动一个游戏对象,它不知道也不关心世界上还有什么。

    如果您使用的是刚体,您想使用myRigidBody.MovePosition()。 如果不是,那么您需要找到一种手动检测和处理碰撞的方法。

    更多信息在这里:

    【讨论】:

    • 谢谢!我实际上已经找到了解决方法,但我非常感谢您的帮助!但是我仍然会实施您的解决方案,因为它可能会修复我尚未遇到的错误。
    • @TheWalrus 碰撞检测/解决是一场无休止的噩梦。欢迎来到游戏开发!
    【解决方案2】:

    原来我是个傻瓜,胶囊实际上是一个空游戏对象的子对象,它有脚本(我这样做是为了改变对象的轴心点)。

    我所要做的就是从胶囊本身中移除碰撞器和刚体并将它们添加到父对象中,现在一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-30
      • 2018-09-26
      • 2014-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多