2016-03-30 8 views
0

を実行するたびにクラッシュします。Unityは、私は私がそれを削除した場合、それは正常に動作しますので、それは、しばらくとは何かを持っていると信じて、このスクリプト

using UnityEngine; 
using System.Collections; 

public class Movement : MonoBehaviour { 
public float speed = 1f; 
public float pos = 0f; 
void Start() { 

} 

void Update() { 

    float temp = Input.acceleration.x; 
    while (pos >= -200f && pos <= 200f){ 

     if (Input.touchCount > 0) { 
      if ((Input.GetTouch (0).position.x >= 250)) { //Right 
       transform.Rotate (0, 0, 0); 
       pos += speed * 500 * Time.deltaTime; 
       transform.Translate (speed * 500 * Time.deltaTime, 0, 0, Space.World); 
      } else if ((Input.GetTouch (0).position.x < 250)) { //Left 
       transform.Rotate (0, 0, 0); 
       pos -= speed * 500 * Time.deltaTime; 
       transform.Translate (-speed * 500 * Time.deltaTime, 0, 0, Space.World); 
       //Time.timeScale = 0.2F; 

      } 
     } 
    } 
    //Time.timeScale = 1F; 
    transform.Rotate (0, 0, -temp * 500 * Time.deltaTime); //Rotation 

    } 
} 

基本的には、アンドロイドの加速度計とタッチスクリーンを使用して立方体を制御するスクリプトです。それはうまく動作しますが、私はそれを再生するたびにクラッシュする動きを "バインド"するためにwhileを実装するとき。

+0

ループは、それが最も可能性が高い(=無限ループ)を停止しないクラッシュした場合。これは、基本的にループする(Update)という機能で動作するため、悪いです。これは、ゲームがフレーム内の無限ループに詰まり、ゲームが進行できないことを意味します。なぜこれは「中」である必要がありますか?単純な ''もし ''それをしてはいけませんか? –

+1

代わりに[coroutine](http://docs.unity3d.com/Manual/Coroutines.html)を使ってみてください – LibertyLocked

+0

aswersに感謝します!私はプログラミングでかなりの午前:D – user3848742

答えて

4

Updateがゲームループであるため、Updateにはwhileループを使用しないでください。これは本質的に、あなたのループに閉じ込められ、次のフレームを決してレンダリングすることができないため、ゲームの更新を停止します。 whileの代わりにifステートメントを使用して、目的の効果を得てください。

0

だけLASE言い直すする:

アップデートは限り、あなたのゲームが実行されていて、それが唯一のアクティブなゲームオブジェクト上で実行として実行されます。 したがって、更新機能ではWhileループを使用しないでください。

用途:

if (pos >= -200f && pos <= 200f){ 

} 
関連する問題