bool变量不会改变统一3d

时间:2013-05-26 13:20:58

标签: c# boolean unity3d

我正试图让团结一样的炸弹人在同一时间学习c#。

我尝试在代码中更改targetDestroyed1 var的bool值,但似乎存在问题..

问题: 在创建对象时,在GetNearestTaggedObject1中,targetDestroyed1变为true。但是在InstantiateFire()的if(!targetDestroyed1)条件下,targetDestroyed1始终保持为false并且实例化为continue而不是stop

这是我的代码:

private bool targetDestroyed1;

  void  Start (){
OriginXplosion = new Vector3(transform.position.x, transform.position.y, transform.position.z); 
InstantiateFire();
}

void  Update (){ 
if (target1 != null) {
        Destroy (target1);
    }

public void  InstantiateFire (){
    FireRate = player_actions.FireRate;
    FireRate -= 1;
    targetDestroyed1 = false;

    for(int i1= 0; i1 <= FireRate; i1++){
            float i1_axeZ= transform.position.z + i1;
        if(i1_axeZ <= 7)
        {
            if (!targetDestroyed1)
            {
                Instantiate (ParticulesFeu, Axe1[i1].transform.position, ParticulesFeu.transform.rotation);
                ScanForTarget1();
            }
        }
}
Destroy (gameObject);
}

void  ScanForTarget1 (){
    target1 = GetNearestTaggedObject1();
}


GameObject GetNearestTaggedObject1 (){

    float nearestDistanceSqr= 0.2f;
    GameObject[] taggedGameObjects= GameObject.FindGameObjectsWithTag(searchTag); 

    foreach(GameObject obj in taggedGameObjects) {

        Vector3 objectPos= obj.transform.position;
        float distanceSqr= (objectPos - transform.position).sqrMagnitude;

        if (distanceSqr < nearestDistanceSqr) {
            target1 = obj;
            targetDestroyed1 = true;
            nearestDistanceSqr = distanceSqr;
        }
    }

    return target1;
}

}

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

查看您的InstantiateFire方法:

public void  InstantiateFire (){
    FireRate = player_actions.FireRate;
    FireRate -= 1;
    targetDestroyed1 = false;

    ...

您在第三行明确设置 targetDestroyed1false。因此在循环的第一次迭代中它总是错误的。这意味着您可以调用InstantiateScanForTarget1,具体取决于i1_axeZ和其他变量的值。

如果变量 设置在GetNearestTaggedObject1内,那么true中的循环的下一次迭代它确实会保持设置为InstantiateFire - 但是你' d需要再次进入if块才会产生任何影响。您应该尝试在调试器中单步执行或添加更多日志记录以查看正在发生的情况。从根本上说,你的代码目前很混乱,我很害怕。

除了其他任何内容之外,我强烈建议您创建一个适当的类,它封装目标以及它是否被销毁...然后创建该类型的列表:

private readonly List<Target> targets = new List<Target>();

这样你就不必拥有八个独立的变量,不同的代码操纵每个变量。