2016-08-01 6 views
0

このセクションのコードを実行し、「d」キーを押すたびにUnityがクラッシュします。これは論理エラーがあると私に信じさせるが、私は何がうまくいかないのか分からない。Unityscript - 5秒かかる動作に5秒の遅延を設定するには

private var delayAmount   = 5.0; 
private var timeDelay   = 0.0; 
private var abilityEnd   = 0.0; 
public var  abilityDuration  = 5.0; 
public var  speed    = 2.0; 

function Update() 
{ 
    if (Input.GetKey ("d") && Time.time > timeDelay) 
    { 
     abilityEnd = Time.time + abilityDuration; 
     while(abilityEnd > Time.time) 
     { 
      transform.Translate(0, 0, Time.deltaTime * speed); 
     } 
     timeDelay = Time.time + delayAmount;  
    } 
} 
+0

ここで何をしようとしていますか? –

+0

ここで何をしようとしているのか分かりませんが、一般的に遅延を追加する最も良い方法は、コルーチンと収量を使うことです。こちらをご覧ください:https://docs.unity3d.com/ScriptReference/MonoBehaviour.StartCoroutine.html – adityasinghraghav

答えて

0

使用ANループが壊れると団結の過負荷とクラッシュしないので、代わりにwhileループのif文(私はちょうど私の説明だ何の専門家だ私を引用しないでください)。

+0

それは動作しませんでしたか? – LongarMD

+0

私はそれがうまくいったと仮定しますが、問題はより大きく、OPの問題を完全には解決しませんでした(したがって、あなたが最初に受け取った不当なdownvote)。 – Everts

0

ここで何が起こるかは、Time.timeが変更できないためにwhileを入力すると無限ループにとどまることです。エンジンが更新されない可能性のある値にリレーしている間に、エンジン自体をブロックするだけです。

エンジンがUpdateメソッドから抜けるようにすることで、アプローチを変更する必要があります。これらのシナリオを処理する一般的な方法は、多くのコルーチンと実行セマフォを使用することです。

関連する問題