访问另一个脚本的变量后,Unity NullReferenceException

时间:2017-08-10 19:42:08

标签: javascript unity3d unityscript

在尝试从List中的另一个GameObject的另一个脚本中访问变量后,每次都会出现异常。主要代码如下所示:

private var BombList = new List.<GameObject>();
private var BombTemp : GameObject;
private var BombTempScript : Bomb;
function Start () {
    BombTemp = null;
    BombTempScript = null;
    BombList.Clear();
}
function Update () {
if(BombList.Count > 0){
        for(var i : int = 0; i<BombList.Count;i++){
            BombTemp = BombList[i];
            BombTempScript = BombTemp.GetComponent.<Bomb>();
            if(BombTempScript.bombCountdown <= 0){
                BombTempScript.explode();
                BombList.Remove(BombTemp);
                addHealth(-1);
            }
        }
    }
}

function OnTriggerEnter (other : Collider) {
if(other.gameObject.CompareTag("Bomb")){
        BombList.Add(other.gameObject);
        other.gameObject.GetComponent.<Bomb>().notListed = false;
    }
}
function OnTriggerExit(other : Collider){
    if(other.gameObject.CompareTag("Bomb")){
        if(BombList.Contains(other.gameObject)){
            BombList.Remove(other.gameObject);
            other.gameObject.GetComponent.<Bomb>().notListed = true;
        }
    }
}

如果列表中没有对象,则更新功能中的代码无法按预期工作。但是当它内部有一个对象时,它会在if行中生成一个NullReferenceException:

if(BombTempScript.bombCountdown <= 0)

指向bombCountdown的变量正在不断变化。 这是预期的代码:

#pragma strict
public var bombCountdown : float;
public var notListed : System.Boolean;

function Start () {
    bombCountdown = 10.0;
    notListed = true;
}

function Update () {
    bombCountdown -= Time.deltaTime;
    if(bombCountdown <= 0 && notListed)
        explode();
}
function explode(){
    Destroy(myText);
    Destroy(this.gameObject);
}

我希望你能帮助我们。

先谢谢傻科学家

0 个答案:

没有答案