If statement 为什么我的if语句中的条件被忽略?C#

If statement 为什么我的if语句中的条件被忽略?C#,if-statement,unity3d,If Statement,Unity3d,我知道这是一个初学者的问题,但在我了解这里发生的事情之前,我无法继续学习。在Update()中执行的if块中,我无法理解为什么两个if语句同时执行。我认为,只要在块的开头初始化了initiative变量,编译器就会向下移动到第一个if语句,以查看条件是否为true。如果为真,它将执行该块中的代码,直到计时器达到零。然后它会向下移动到下一个。如果第一个条件为真,那么第二个条件为假,因此它将再次向上移动到开头。将为倡议计算新的bool值,并重复该过程。让我大吃一惊的是,无论我做什么,这两个块都会被执

我知道这是一个初学者的问题,但在我了解这里发生的事情之前,我无法继续学习。在Update()中执行的if块中,我无法理解为什么两个if语句同时执行。我认为,只要在块的开头初始化了initiative变量,编译器就会向下移动到第一个if语句,以查看条件是否为true。如果为真,它将执行该块中的代码,直到计时器达到零。然后它会向下移动到下一个。如果第一个条件为真,那么第二个条件为假,因此它将再次向上移动到开头。将为倡议计算新的bool值,并重复该过程。让我大吃一惊的是,无论我做什么,这两个块都会被执行,计时器完全被忽略。这很令人困惑

我已经编写了一些非常基本的代码来突出我遇到的问题。我在Unity3d中使用这个C代码:

public float firstTimer = 2;
public float secondTimer = 10; 
public bool initiative; 

void Update()
{

    initiative = InitiativeOrder(); 

    if(initiative == true && firstTimer > 0);
    {
        firstTimer -= Time.deltaTime;
        Debug.Log ("First timer has finished!"); 
    }

    if(initiative == false && secondTimer > 0);
    {
        secondTimer -= Time.deltaTime;
        Debug.Log ("Second timer has finished!"); 
    }
}

public bool InitiativeOrder()
{
    float player =  Random.Range(1,10); 
    float enemy = Random.Range(1,10); 

    if(player > enemy)
    {
        return true; 
    }
    else if (player < enemy)
    {
        return false; 
    }
    else 
    {
        return true; 
    }
}
public float firstTimer=2;
公共浮点数秒计时器=10;
公共布尔倡议;
无效更新()
{
主动性=主动性订单();
if(initiative==true&&firstTimer>0);
{
firstTimer-=Time.deltaTime;
Log(“第一个计时器已完成!”);
}
if(initiative==false&&secondTimer>0);
{
secondTimer-=Time.deltaTime;
Log(“第二个计时器已完成!”);
}
}
公共图书馆倡议令
{
浮动玩家=随机范围(1,10);
浮动敌人=随机。射程(1,10);
如果(玩家>敌人)
{
返回true;
}
否则如果(玩家<敌人)
{
返回false;
}
其他的
{
返回true;
}
}

计时器不工作的原因是:;在你的if()之后

它不会同时执行两个if()块

此代码

initiative = InitiativeOrder(); 
每个帧都被调用,witch估计每秒60帧,因此每秒每帧它都在执行该方法,无论每秒有多少次它是真是假,这就是为什么它似乎同时触发if()块,但实际上更新的每个帧都会触发其真或假,这是非常快的

如果将该调用放入OnStart()中,它只会像

void Start(){
 initiative = InitiativeOrder(); 
}
编辑您的代码

public float firstTimer = 2;
public float secondTimer = 10; 
public bool initiative; 
void Start(){
 initiative = InitiativeOrder();
}
void Update()
{



    if(initiative == true && firstTimer > 0)
    {
        firstTimer -= Time.deltaTime;
        Debug.Log ("First timer has finished!"); 
    }

    if(initiative == false && secondTimer > 0)
    {
        secondTimer -= Time.deltaTime;
        Debug.Log ("Second timer has finished!"); 
    }
}

public bool InitiativeOrder()
{
    float player =  Random.Range(1,10); 
    float enemy = Random.Range(1,10); 

    if(player > enemy)
    {
        return true; 
    }
    else if (player < enemy)
    {
        return false; 
    }
    else 
    {
        return true; 
    }
}
public float firstTimer=2;
公共浮点数秒计时器=10;
公共布尔倡议;
void Start(){
主动性=主动性订单();
}
无效更新()
{
if(initiative==true&&firstTimer>0)
{
firstTimer-=Time.deltaTime;
Log(“第一个计时器已完成!”);
}
if(initiative==false&&secondTimer>0)
{
secondTimer-=Time.deltaTime;
Log(“第二个计时器已完成!”);
}
}
公共图书馆倡议令
{
浮动玩家=随机范围(1,10);
浮动敌人=随机。射程(1,10);
如果(玩家>敌人)
{
返回true;
}
否则如果(玩家<敌人)
{
返回false;
}
其他的
{
返回true;
}
}

卸下安全带;从if()if(initiative==true&&firstTimer>0)之后开始;谢谢!但我仍然有点困惑,因为即使我将初始化设置为Start或OnStart,它仍然会在true和false之间快速振荡。为什么会这样?你把;'它是从你的if()之后开始的,你是怎么得到它的?它在开始,两个>都不见了,它还在做。我一定是遗漏了什么,试试我是如何在“编辑你的代码”部分输入的
void Start(){
 initiative = InitiativeOrder(); 
}
public float firstTimer = 2;
public float secondTimer = 10; 
public bool initiative; 
void Start(){
 initiative = InitiativeOrder();
}
void Update()
{



    if(initiative == true && firstTimer > 0)
    {
        firstTimer -= Time.deltaTime;
        Debug.Log ("First timer has finished!"); 
    }

    if(initiative == false && secondTimer > 0)
    {
        secondTimer -= Time.deltaTime;
        Debug.Log ("Second timer has finished!"); 
    }
}

public bool InitiativeOrder()
{
    float player =  Random.Range(1,10); 
    float enemy = Random.Range(1,10); 

    if(player > enemy)
    {
        return true; 
    }
    else if (player < enemy)
    {
        return false; 
    }
    else 
    {
        return true; 
    }
}