我是初学者,在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");
}
答案 0 :(得分:0)
你的代码并不完全符合你的问题,但我认为问题在于,“胜利”和“失败”条件都是由物理学引发的,而且两者都发生在同一个框架中?
最直接的处理方法是使用bool(或更好的,枚举)来存储游戏的状态 - 如果关卡结束,碰撞功能不应该做任何事情。看起来似乎应该有一种漂亮,优雅的方式来解决这个问题,但我并不知道。禁用碰撞器可能不起作用,因为在调用物理回调函数时已经发生了两次碰撞。