2017-11-04 10 views
2

私は実際に2つの質問があります。まず、簡単なコードを持っています。なぜ私はブールを2回変更できないのですか?

基本的には、逆にfalseに設定されています。最初の3秒後

image


ステートメントが起こると、それは本当の逆設定した場合。 image
さらに3秒後に2番目のif文が発生し、nope値が20に設定されますが、逆の値はfalseに設定されません。

image

私は理由を理解することはできません。最初のif文は、2番目の文がfalseに反転すると同時に機能しますか?私は基本的にx秒ごとに偽から真に変えたいと思っていますが、私はその論理を理解できませんでした。

私の2番目の質問は、なぜ6だけでなく6.012766なのですか?

image

これは、フレームをリロードする時期ではありませんか?このサイクルが続く場合、これは問題にはなりませんか?

+1

私はあなたがそうであると言っているように起こっているとは思わないので、[mcve]を追加する必要があると思います。 'nope = 20;'行が走っていれば、それより上の行も走っています。潜在的に「逆転」されたものがありますか? – Carcigenicate

+0

このスクリプトにはたくさんのものがありますが、ここでこの問題に関連するコードを貼り付けようとします。さて、私はコードを編集し、そのスクリプトに関連するすべての機能を追加しました。 – Alex

+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等秒で発生します。

2番目の問題は、2番目のケースでchangeTimeを変更していないことです。したがって、次のフレームの最初の条件ヒット(changeTime <= Time.timeはまだtrue)にreversedfalseに変更した後、reversedtrueに戻します。

+0

私のコードは次のように動作するはずです:changeTimeは3に設定されます。 reversedはtrueに設定され、changeTimeはそれ自身+時間が経過します。これは3 + 3 = 6である。そして3秒後に2番目のif文が動作します。逆にfalseに再び設定されます。 nopeは20に設定されます。逆の場合を除いてすべてOKですが、再びfalseに設定されることはありません。私はこれを理解できません。 2回目のステートメントを最初のステートメントの3秒後に発生させたいので、私はchangeTimeを倍増させています。私は倍増が私の問題である理由を理解できません – Alex

+0

@Alex倍増問題を説明するために変更時間の例を追加しました。また、 'reversed'が直ちに' true'に戻ってしまう理由を読むことができます。'time'は、フレームが始まる秒数(正確ではない)時間であることに注意してください。今度は1fpsがあっても、この時間は正確ではないでしょう –

+1

今問題が表示されます。私は値をfalseに変更できないと思った。実際には、私は次のフレームの後でそれは真に再び変化し、私はそれを実現することさえできません。ありがとうございました – Alex

関連する問題