Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 在Unity 2D中,如何防止CircleCollider2D停留在另一个上?_Unity3d - Fatal编程技术网

Unity3d 在Unity 2D中,如何防止CircleCollider2D停留在另一个上?

Unity3d 在Unity 2D中,如何防止CircleCollider2D停留在另一个上?,unity3d,Unity3d,在Unity 2D中,如果我将CircleCollider2D放置在相同的x位置,那么它将停留在另一个位置,如图所示。我怎样才能防止这种情况 (如果我把一个扔到离我不远的黄色的上面,那么它们都会掉下来。) 我可以想出一些技巧,比如把球放在离球员随机放置的地方稍微远一点的地方,或者在球相互碰撞时给它一点随机力。我只是想知道是否有一种巧妙的方法,比如一些物理引擎相关的参数,比如我不熟悉的分数/阻力,你可以设置它来防止这种“看似不真实的结果”。好的,而不是让球落在正确的位置, 只是不允许用户执行此操

在Unity 2D中,如果我将
CircleCollider2D
放置在相同的x位置,那么它将停留在另一个位置,如图所示。我怎样才能防止这种情况

(如果我把一个扔到离我不远的黄色的上面,那么它们都会掉下来。)


我可以想出一些技巧,比如把球放在离球员随机放置的地方稍微远一点的地方,或者在球相互碰撞时给它一点随机力。我只是想知道是否有一种巧妙的方法,比如一些物理引擎相关的参数,比如我不熟悉的分数/阻力,你可以设置它来防止这种“看似不真实的结果”。

好的,而不是让球落在正确的位置, 只是不允许用户执行此操作,始终将球轻轻地落在球的左侧或右侧


您可以直接使用光线投射来检查是否存在这种情况(仅当两个中心圆对齐时)。

为什么要阻止这种行为?这正是球在2D环境中的行为方式。如果您想让球落下,只需在x轴上提供一点偏移,或者不要让玩家选择将球完全对齐(这当然取决于您正在进行的游戏类型)。

我使用以下代码来解决此问题:

当两个球相互碰撞时,对两个球调用以下方法

public void AddRandomMinorForce()
{
    if (!randomForceUsed)
    {
        randomForceUsed = true;
        var x = UnityEngine.Random.Range(-1f, 1f);
        var y = UnityEngine.Random.Range(-1f, 1f);
        var direction = new Vector3(x, y, 0f);
        rb.AddForce(direction * 10);
    }
}

非常感谢。这是一个解决方案,但在我看来似乎是一个黑客。我想知道是否有一个内置的或更“正确”的方式来做这件事。谢谢。我觉得这是不自然的,你可以很容易地投下很多球,而且所有的球都排得很好。我想知道是否有一种内置的、更少“黑客”的方法来防止这种情况发生。@ArtS虽然我不知道任何内置功能,但我相信您自己也可以轻松地编写“狡猾”行为的代码。谢谢。我尝试使用一些参数,但没有任何效果。似乎没有什么内在的关联。无论如何,谢谢:)@ArtS的确,这是预期的行为。编辑器中没有内置的函数或选项,无法使其按您所需的方式运行。您需要自己实现该行为,或者在x轴上稍微偏移,或者施加一些较小的力。一个最小的偏移量或力就可以了。