2017-01-16 8 views
1

シンプルタイマースクリプトを作成しました。タイマーが0になった後、新しいシーンがロードされます。しかし、ロードされているシーンを一度再生するのではなく、連続的にシーンをロードし続けます。一度シーンをロードするだけでいいです。タイマーは、1回ではなく連続してシーンをロードし続けます。

using UnityEngine; 
using UnityEngine.UI; 
using System.Collections; 
using UnityEngine.SceneManagement; 

public class Timer : MonoBehaviour 
{ 
public float timelimit; 
public Text text; 

public void ChangeScene(int changeTheScene) 

{ 
    SceneManager.LoadScene(changeTheScene); 
} 

void Update() 
{ 
    timelimit -= Time.deltaTime; 
    text.text = "TimerText:" + Mathf.Round(timelimit); 
    if (timelimit < 0) 
    { 
     timelimit = 0; 
     SceneManager.LoadScene(1); 
    } 
    } 
} 

答えて

3

注:あなたのコードは、記載されている問題を引き起こしません。したがって、このコンポーネントは、ロード後に実行を継続し、あなたの新しくロードされたシーンが繰り返しシーン

  • をロードすることで同じコンポーネントを、持っている

    • あなたが実際に付加的にシーンをロードしている:私は2つの可能性が表示されます。

      あなたが引くすべてのフレーム:あなたはを通して、あなたのコードに従うならば、あなたはif文がいるtimelimitが達すると常に trueになります条件を持っていることがわかります、後者を想定すると

    数字はtimelimitです。次に、timelimitが0より小さい場合は、timelimitをゼロに設定し、シーンをロードします。

    前のフレームでtimelimitをゼロに設定してから、数値を減算すると、は常にになります。後続のフレームごとに常にシーンが再びロードされます。

    代わりにブール変数を使用して、シーンを読み込んでいるかどうかを追跡してください。または、コードを実行しないようにシーンをロードするとすぐにコンポーネントを破棄します。

    問題が実際にあなたの新しいシーンにこのコンポーネントを持っている場合は、それも...削除することを検討してください! :-)

    EDIT:

    あなたが シーンかをロードしたかどうかを追跡するためにブール変数を使用して代わりに試してみてください。それはそれがすべてのシーンをロードしないことはない初期化されなかった場合は

    public class Timer : MonoBehaviour 
    { 
        public float timelimit; 
        public Text text; 
        static bool loadedScene = false; 
    
        public void ChangeScene(int changeTheScene) 
    
        { 
         //SceneManager.LoadScene(changeTheScene); 
        } 
    
    
    
        void Update() 
        { 
         //Exit if we have already loaded scene 
         if (loadedScene) 
         { 
          //Destroy Timer Text 
          Destroy(text.gameObject); 
          //Destroy this Timer GameObject and Script 
          Destroy(gameObject); 
          return; 
         } 
    
         timelimit -= Time.deltaTime; 
         text.text = "TimerText:" + Mathf.Round(timelimit); 
         if (timelimit < 0) 
         { 
          timelimit = 0; 
          loadedScene = true; //We have loaded Scene so mark it true 
          SceneManager.LoadScene(1); 
         } 
        } 
    } 
    
  • +0

    こんにちはダン、私の新しいシーンは、新しいシーンで同じコンポーネントを持っていません。だから、あなたが "ゲームシーン"で遊ぶのは、タイマーが0になったら "終了シーン"をロードしたいが、終了シーンをロードすると、 "ゲームシーン"から "終了シーン"タイマーからのテキストがEndシーンに表示される必要があります。 – Jakethagun

    +0

    こんにちはダン、私はタイマーとそのテキストを破壊しようとしている、私はタイマーをすべて破棄した場合、私はそれがUnityでゲームを一時停止し、再生することができませんテキストを破壊する。何か案は? – Jakethagun

    +0

    @Jakethagunダンの答えをサンプルコードで修正しました。静的なブール変数を使用してそれを行います。これを行うには、PlayerPrefsを使用することもできます。 – Programmer

    0

    タイムラインが初期化されていない可能性があります。 Unity Editorで0に設定されていないことを確認しましたか?

    +0

    、それが必要なシーンをロードしているが、それはそれは一度ロードされた後、それをロードを停止しません。 – Jakethagun

    +0

    私はそれが一度働いたことを知らなかった;) - それは状況を変える。 - 'SceneManager.LoadScene'を呼び出した後に、たとえば、タイムラインを9999に設定することができます。次のシーンをロードする前に、TimerのUpdateメソッドが別の時間呼び出されている可能性があるかどうかを確認します。あなたが変更したいかもしれないもう一つのことは、Updateメソッドでは、あなたが書いた 'ChangeScene'メソッドの代わりにシーンマネージャに直接呼び出されるということです。 –

    +0

    あなたの助けをありがとう:) – Jakethagun

    関連する問題