C# 布尔变量don';unity 3d中的t变化

C# 布尔变量don';unity 3d中的t变化,c#,boolean,unity3d,C#,Boolean,Unity3d,我试图在unity中制作一个类似轰炸机的游戏,同时学习c# 我试图在代码中更改targetDestroyed1 var的bool值,但似乎存在问题 问题是: 在GetNearestTaggedObject1中,当创建对象时,targetDestroyed1变为true。但是在instanceFile()的if(!targetDestroyed1)条件中,targetDestroyed1始终保持为false,并且实例化将继续而不是停止 这是我的密码: private bool targetDest

我试图在unity中制作一个类似轰炸机的游戏,同时学习c#

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

问题是: 在GetNearestTaggedObject1中,当创建对象时,targetDestroyed1变为true。但是在instanceFile()的if(!targetDestroyed1)条件中,targetDestroyed1始终保持为false,并且实例化将继续而不是停止

这是我的密码:

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;
}

}
private bool targetDestroyed1;
无效开始(){
originexplosion=新矢量3(transform.position.x,transform.position.y,transform.position.z);
实例化文件();
}
无效更新(){
如果(target1!=null){
摧毁(target1);
}
公共void实例化文件(){
FireRate=玩家的动作。FireRate;
燃速-=1;
targetDestroyed1=假;

对于(int i1=0;i1请查看您的
实例化fire
方法:

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

    ...
您在第三行将
targetDestroyed1
显式设置为
false
。因此,在循环的第一次迭代中它将始终为false。这意味着您可以调用
实例化
扫描目标1
,具体取决于
i1_axeZ
和其他变量的值

如果变量设置在
GetNearestTaggedObject1
中,那么在
实例化文件
中循环的下一次迭代中,它实际上将保持设置为
true
——但是在它产生任何效果之前,您需要再次进入
If
块。您应该尝试在调试器中单步执行或添加更多日志,以查看发生了什么发生了什么。从根本上说,恐怕你的代码目前相当混乱

除此之外,我强烈建议您创建一个适当的类来封装目标以及目标是否被破坏……然后创建该类型的列表:

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

这样,您就不必有八个单独的变量,每个变量都由不同的代码操作。

您使用的
targetDestroyed1
看起来不错。您是否确保
if(distanceSqr
实际上正在启动?我认为这很好。他的问题是他希望在
for
循环中的某个点将其设置为
true
(通过
ScanForTarget1()
GetNearestTaggedObject1()
是,但是如果我在start()中设置此变量),或在声明private bool targetDestroyed1=false;中,我有相同的issue@Malakiof:不清楚您的意思。老实说,您的代码目前非常混乱。您的缩进到处都是,这对您没有帮助。@Ergwun:我明白您的意思-但我们目前确实没有足够的其他证据继续下去。Wil我编辑了这个答案。@JonSkeet是的。我认为他需要一步一步地找出他预期的开火条件实际上并没有开火。