Unity:在保持游戏功能的同时检测碰撞开关

时间:2015-04-08 16:38:09

标签: unity3d gameobject

我为一个名为“Tunnel”的预制件创建了一个随机生成器。每当我与隧道预制件碰撞时,我都希望保持游戏运行。如果我不再与隧道相撞,我希望游戏停止。

游戏适用于第一个隧道,但是当我到达第一个隧道的末尾(第二个隧道的开头 - 它们重叠)时,我的“OnTriggerExit2D”功能会停止游戏。

有没有办法告诉我的“OnTriggerExit2D”检查我是否与另一条隧道发生碰撞?

这是我的代码:

void OnTriggerEnter2D(Collider2D other)
     {
         Debug.Log (other.gameObject.tag);
         if (other.gameObject.CompareTag ("LeftTunnel")) {
             touchRef.onTunnelL = true;
         }
         if (other.gameObject.CompareTag ("RightTunnel")) {

             touchRef.onTunnelR = true;
         } 

     }

     void OnTriggerExit2D(Collider2D other)
     {
         if(other.gameObject.CompareTag("LeftTunnel"))
         {
             touchRef.OnTriggerExit2Dchild();
             touchRef.onTunnelL = false;
         }

         if(other.gameObject.CompareTag("RightTunnel"))
         {
             touchRef.OnTriggerExit2Dchild();
             touchRef.onTunnelR = false;
         }
     } 

谢谢!

1 个答案:

答案 0 :(得分:0)

因此,在与一些人协商后,我决定改变整个机制以使用光线投射,现在效果很好。

以下是未来任何人的代码(我在Update上调用cast函数):

void Cast()                                                                                                                                        
{
    for (int i = 0; i < Input.touchCount; ++i)
    {
        Vector2 test = Camera.main.ScreenToWorldPoint(Input.GetTouch(i).position);
        RaycastHit2D hit = Physics2D.Raycast(test, (Input.GetTouch(i).position));
        Vector2 touchPos = new Vector2(test.x, test.y);
        onLeft(touchPos);
        onRight(touchPos);

    }
}
void onLeft(Vector2 touchPos){
    Collider2D tempL;
    if (tempL = Physics2D.OverlapPoint (touchPos)) {
        if(tempL.CompareTag("LeftTunnel")){
        Debug.Log ("Hit Left tunnel");
        onTunnelL = true;
        }
    }
    else{
        onTunnelL = false;
    }
}
void onRight(Vector2 touchPos){
    Collider2D tempR;
    if (tempR = Physics2D.OverlapPoint (touchPos)) {
        if(tempR.CompareTag("RightTunnel")){
            Debug.Log ("Hit Right tunnel");
            onTunnelR = true;
        }
    }
    else{
        onTunnelR = false;
    }
}