OnCollisionStay一次碰撞检测C#unity中的两个平面?

时间:2015-08-05 07:15:33

标签: c# unity3d collision-detection

我是初学者,在Stacker游戏中工作,有多个飞机,但其中一个是真的,另一个是假的。现在我的问题是,有时候堆叠器同时停在两个平面上,两个函数都被调用'游戏结束'而其他'进入下一个级别'。告诉我如何比较两个标签,如果两个标签都是真的那么做。谢谢,这是我的代码。

  

void OnCollisionStay(Collision collision) {

        if (collision.collider.tag == "plane1") {

            if (script2.rb.velocity.magnitude == 0.0f) {

                collision.collider.gameObject.GetComponent<Renderer> ().material.mainTexture = color1;
                cont++;
                SetCountText ();
                script1.jump1 ();
                StartCoroutine (wait ());
            }

        } else if (collision.collider.tag == "plane2") {
            if (script2.rb.velocity.magnitude == 0.0f) {
                script.jump ();
                Time.timeScale = 0;
            }
            else {
                if (script2.rb.velocity.magnitude == 0.0f) {
                    script.jump ();
                    Time.timeScale = 0;
                }

            }


        }

      if (collision.collider.tag == "plane1" && collision.collider.tag ==    "plane2") {

            script.jump ();
            Time.timeScale = 0;
            Debug.Log("hello");
        }

1 个答案:

答案 0 :(得分:0)

你的代码并不完全符合你的问题,但我认为问题在于,“胜利”和“失败”条件都是由物理学引发的,而且两者都发生在同一个框架中?

最直接的处理方法是使用bool(或更好的,枚举)来存储游戏的状态 - 如果关卡结束,碰撞功能不应该做任何事情。看起来似乎应该有一种漂亮,优雅的方式来解决这个问题,但我并不知道。禁用碰撞器可能不起作用,因为在调用物理回调函数时已经发生了两次碰撞。