为什么我不能两次更换bool?

时间:2017-11-04 15:08:29

标签: c# unity3d

我实际上有两个问题。首先,我有简单的代码

public float changeTime;
public float changeTimeStart;
public bool reversed;
public float nope;

void Update(){
change ();
}
void start(){
changeTime = Time.time + changeTimeStart;
reversed = false;
}
void change(){
        if (changeTime <= Time.time && reversed == false) {
        reversed = true;
        changeTime = Time.time + changeTime;
    }
    if (changeTime <= Time.time && reversed == true) {
        reversed = false;
        nope = 20;
    }
}

基本上在开头反转设置为false。

image


首先3秒后如果语句发生并且它设置为反转为真。 image  
再过3秒后,如果语句发生,它将nope值设置为20但不将反转值设置为false。

image

我无法理解为什么。第二个语句集反转为false时,第一个if语句是否也有效?我基本上希望它每隔x秒从false变为true但我无法掌握逻辑。

我的第二个问题是为什么6.012766不仅仅是6?

image

这是重新加载框架的时间吗?如果这个循环继续下去,这不会成为问题吗?

1 个答案:

答案 0 :(得分:3)

每当当前时间超过更改时间时,只需延长 x 秒的更改时间:

void change(){
    float changeRate = 3F; // x or changeTimeStart in your case

    if (Time.time < changeTime)
       return;

    reversed = !reversed;
    nope = 20; 
    changeTime = Time.time + changeRate; // or changeTime += changeRate
}

您的问题是在第一种情况下将更改时间加倍 - 而不是通过changeRate扩展它,而是使用当前时间添加changeTime(比当前时间略小)。所以变化将发生在大约3,6,12,24,48等秒。

第二个问题是你没有在第二种情况下修改changeTime。因此,在下一帧中将reversed更改为false后,第一个条件点击(changeTime <= Time.time仍然为真)并将reversed更改回true