2016-03-30 5 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 

    } 
} 

Это в основном сценарий для управления кубом с использованием акселерометра android и сенсорного экрана. Он отлично работает, но когда я реализую это время, чтобы «связать» движение, оно падает, когда я его воспроизвожу.

+0

Если петля выходит из строя, что, скорее всего, не останавливается (= бесконечный цикл). Это плохо, тем более, что он работает в функции, которую он сам в основном петли (Update). Это означает, что игра застревает в бесконечном цикле в кадре, и игра не может прогрессировать. Почему это должно быть 'while'? Не следует ли просто «если» сделать это? –

+1

Попробуйте использовать [coroutine] (http://docs.unity3d.com/Manual/Coroutines.html) вместо – LibertyLocked

+0

Спасибо за aswers! Я совершенно нул при программировании: D – user3848742

ответ

4

Вы не должны использовать петлю while в Update, потому что Update - ваш игровой цикл. Это существенно останавливает игру от обновления, потому что она заперта в вашем цикле и никогда не может отобразить следующий кадр. Попробуйте использовать инструкцию if вместо своего while, чтобы произвести желаемый эффект.

0

Просто перефразировать Ласе:

Update работает до тех пор, как ваша игра работает и работать только на активных геймобжекты. Поэтому вы не должны использовать цикл While в функции обновления.

Использование:

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

} 
Смежные вопросы