OnCollisionEnter in unity不会调用函数

时间:2016-12-16 13:51:56

标签: unity3d collision-detection

我是一个完整的团结新手。我想制作一个简单的场景,你有三个生命,如果你碰到一个立方体就会失去生命。这是我的剧本:

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class Lives : MonoBehaviour {

public Transform player;
public static int lives;
public Image live1;
public Image live2;
public Image live3;

// Use this for initialization
void Start () {
    lives = 3;
    live1.enabled = true;
    live2.enabled = true;
    live3.enabled = true;

}

void Update () {
    DisplayOfHearts();
}

public static void Damage() {
       lives -= 1;
}

public void OnCollisionEnter(Collision col) {
    if (col.gameObject.tag == "cube") {
        Lives.Damage();
    }
}

public void DisplayOfHearts() {
    if (lives == 2) {
        live3.enabled = false;
    }
    else if (lives == 1) {
        live2.enabled = false;
    }
    else if (lives == 0) {
        live1.enabled = false;
    }
}

}

发生的事情是玩家无法穿过立方体,但生命数量保持不变。我有什么遗失的吗?

1 个答案:

答案 0 :(得分:1)

问题是您已将脚本附加到错误的游戏对象。脚本和对撞机必须连接到同一个游戏对象。

MonoBehaviour脚本中的Unity方法(例如OnEnable,Update,FixedUpdate,Awake,Start,OnTriggerEnter,OnCollisionStay等)仅适用于附加脚本的游戏对象。

如果您将脚本附加到其他游戏对象,请不要期望其中任何一个可以正常工作。 Update仅在 游戏对象处于活动状态时有效。 OnCollisionEnter仅在直接连接到该游戏对象的对撞机上发生碰撞时有效。 (当孩子有对撞机而不是连接脚本的实际游戏对象时,它甚至不起作用)