2017-02-16 3 views
3

Ich versuche, einen Timer neu zu starten, wenn ich in Unity eine Klippe stürze. Ich habe bereits ein Skript, das mich nach einer gewissen Höhe auf dem Thron respawnen lässt. Ich möchte das gleiche machen, aber statt neu zu starten, startet der Timer neu.Neustart-Timer beim Respawn mit Einheit

public class Timer : MonoBehaviour { 

    public Text timerText; 
    private float startTime; 
    private bool finished = false; 
    private bool started = false; 

    void Update() 
    {  
     if(!started || finished) 
      return; 

     float t = Time.time - startTime; 

     string minutes = ((int) t/60).ToString(); 
     string seconds = (t%60).ToString("f2"); 

     timerText.text = minutes + ":" + seconds;  
    } 

    public void StartTimer() 
    { 
     started = true; 
     startTime = Time.time; 
    } 

    public void StopTimer() 
    { 
     finished = true; 
     timerText.color = Color.yellow;  
    } 
} 

Mein respawning Skript ist auf meiner Kamera-Rig und es ist

public class respawn : MonoBehaviour 
{ 
    public float threshold; 

    void FixedUpdate() 
    { 
     if (transform.position.y < threshold) 
      transform.position = new Vector3(403, 266, 337); 

    } 
} 

Haben Sie eine Ahnung, wie dies zu machen?

+1

können Sie Ihren Code für respawning teilen? Theoretisch sollte es praktisch dasselbe sein. –

Antwort

4

Sie müssen nur den Timer neu zu starten wenn du die fallende Bedingung triffst. Wäre schön, wenn Sie einen Verweis auf den Timer in Ihrem Respawn-Skript haben, so etwas wie:

public class respawn : MonoBehaviour 
{ 
    public Timer timer; 
    public float threshold; 

    void FixedUpdate() 
    { 
     if (transform.position.y < threshold) 
     { 
     //transform.position = new Vector3(403, 266, 337); 
     timer.StartTimer(); 
     } 

    } 
} 
3

Rufen Sie einfach an Starttimer() erneut und fertig in Ihrer Methode zurück:

// ... 
public void StartTimer() 
{ 
    finished = false; 
    started = true; 
    startTime = Time.time; 
} 

public void StopTimer() 
{ 
    finished = true; 
    timerText.color = Color.yellow;  
} 

Vergessen Sie nicht, Ihre Timer in Ihrem Respawn Skript zu stoppen:

public Timer Timer; 

void FixedUpdate() 
{ 
    if (transform.position.y < threshold) 
    { 
     Timer.StopTimer(); 
     transform.position = new Vector3(403, 266, 337); 
    } 

} 
Verwandte Themen