Unity 3D项目中的触发器不是经常工作

时间:2014-02-23 14:03:21

标签: triggers unity3d

重新制作 Snake 游戏。蛇的头是触发器,而苹果只使用对撞机。现在OnTriggerEnter()每次都不起作用 - 蛇的触发器必须多次进入苹果体内才能得到它。

有用于进食的代码:

void Head.OnTriggerEnter(Collider col)
{
    if(col.CompareTag("Food"))
    {
        gameController.FoodEated();
    }
}

public void GameController FoodEated()
{
    Destroy(currentFood);
    InitializeMeal();
    head.GrowUp();
}

void GameController.InitializeMeal()
{
    currentFood = (GameObject)Instantiate(foodPrefab, FindFreeSpace(), Quaternion.identity);
}

还有一种魔力:第一个苹果可以正常食用,但是在苹果被激活之前,蛇可以穿过第二个苹果几次。

我尝试了每个触发器功能,但它们都没有工作。 http://www.youtube.com/watch?v=z_UQi7SGOLw - 错误视频。蛇正在通过苹果进行3-4帧更新。我有另一个实现苹果的想法,但我认为触发更合适。

2 个答案:

答案 0 :(得分:0)

如果你的蛇移动得太快而且苹果对撞机太小,我猜Unity的发动机有时会错过碰撞。

如果在蛇上你有一个刚体组件,你可以通过将“碰撞检测”从“离散”更改为“继续”或“继续动态”来提高碰撞检测质量。

答案 1 :(得分:0)

正如您在上面的视频中看到的那样,我的蛇正在通过在当前transform.position创建一个tailelement来增长。当最后两个尾部元素之间的距离大于或等于1时,TailElement开始移动。

我只是试图将头部对撞机的半径减小10%,现在尾部元素在蛇的运动过程中不会碰撞。现在它工作正常。