OnCollisionEnter不起作用:

时间:2015-03-30 08:33:38

标签: unity3d unityscript

请各位帮忙,我是Unity和编程新手: 我有一个两个Bouncing Ball,标记为BouncingBall1和BouncingBall2,我想当一个子弹击中两个以破坏并且如果时间没有超过displaySecond并且你已经破坏了你赢得的球,但我的问题是OnCollisionEnter无法正常工作。其余部分是胜利的部分,我的代码片段在下面。

function OnCollisionEnter(col.collision) {
    if ((displaySecond < 30) && (
            col.gameObject.tag ==
            BouncingBall1 == null &&
            col.gameObject.tag ==
            BouncingBall1 == null)) {
        print("You have won");
    }
}

2 个答案:

答案 0 :(得分:0)

col.gameObject.tag == BouncingBall1 == null 

我认为问题在于检查对象是否被销毁的方式。这不是方法。此外,您还要检查两行相同的代码是否相同。因此,如果显示秒小于30,则总是返回true。

尝试将其更改为

if ( (displaySecond < 30) && 
(col.gameObject.tag == "BouncingBall1") ) { 
Debug.Log("You have won!") 
}

答案 1 :(得分:0)

听起来你想要跟踪每个球是否已经被摧毁并且当两个球都被摧毁时显示“你赢了”。这段代码有点粗糙,但应该实现这个目标:

var ball1Destroyed = false;
var ball2Destroyed = false;

...

function OnCollisionEnter(col : Collision) {
    if (col.gameObject.tag == "BouncingBall1") {
        ball1Destroyed = true;
    }
    if (col.gameObject.tag == "BouncingBall2") {
        ball2Destroyed = true;
    }
    if (displaySecond < 30 && ball1Destroyed && ball2Destroyed) {
        Debug.Log("You have won");
    }
}

此代码假设唯一的碰撞将发生在子弹和球之间(不是在一个球和另一个球之间),这可以通过collision layers来完成。