2017-01-18 10 views
1

私は、ゲームが始まるとストップウォッチが始まり、シーンが変化しているときにストップウォッチを続行し、リセットしない3Dプロジェクトを開発中です。Unity C#最初のシーンからストップウォッチを一時停止し、2番目のシーンで再開

私はストップウォッチをこのように実装しました:

public class Timer : MonoBehaviour { 

    public static Stopwatch timer; 
    public GUIStyle textStyle; 


    // Use this for initialization 
    void Start() { 

     timer = new Stopwatch(); 
     timer.Start(); 
    } 

    // Update is called once per frame 
    void Update() { 

    } 


    void OnGUI() 
    { 

     textStyle.fontSize = 30; 
     GUI.Box (new Rect (10, 10, 100, 20), "Timer: " + timer.Elapsed.ToString(), textStyle); 
    } 
} 
+0

あなたのストップウォッチはあなたが望むように動作しないと思いますが、正確には何を問題にしていますか? – maazza

+1

あなたが知っておくべきことの1つは、ゲームUI用のOnGUIをもう使用しないでください。エディタのコントロールを設計するときにのみ使用する必要があります。 [Unity Scripting Guide on Immediate Mode GUI](https://docs.unity3d.com/Manual/GUIScriptingGuide.html)の最初の段落を読んでください –

答えて

-1

あなたは単に開始日時を記録して、必要なときに更新し、代わりのDateTimeを使用する必要があります。

さらに、構造体には、DateTimeオブジェクトに対してアクションを実行するための多くのメソッドが含まれています。

https://msdn.microsoft.com/en-us/library/system.datetime(v=vs.110).aspx

+0

「DateTime」ではなく「TimeSpan」をお勧めします。 'DateTime'の開始を追跡します。 –

+1

私はそれが似たようなやり方をするのとは違っていると思います。しかし、はい、それはTimeSpanでもかまいません。 – Everts

+0

この答えは問題とはまったく関係がありません。OPの問題は、新しいシーンにゲームオブジェクトが存在しなくなり、タイマーが停止することです。あなたが彼に救われるように言った開始日時は、彼の現在のタイマーが既にそうであるように、新しい場面で破壊されるでしょう。 –

1

私は私の「魔法スキル」を使用して、あなたが必要かを把握しようとする疑いがありませんので。

TimerオブジェクトにDontDestroyOnLoad()というマークを付けると、新しいシーンが読み込まれたときにこのオブジェクトを破棄しないようにする必要があります。 :

void Awake() 
{ 
    DontDestroyOnLoad(gameObject); 
} 
+1

これを実行すると、ストップウォッチを静的でないオブジェクトにすることもできます。 –

+0

@ScottChamberlain私は同意するが、これはちょうど私の推測ですので、私はOPからいくつかのフィードバックを得るまで、より詳細に入りたいと思っていません。 –

関連する問題