2016-04-22 13 views
0

Hier ist mein Score Manager Skript, das ich gemacht:Score Multiplikator von Zeit

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

public class ScoreManager : MonoBehaviour { 

    public Text scoreText; 

    public float scoreCount; // What the score is when the scene first loads. I set this as zero. 

    public float pointsPerSecond; // Every second, the points increase by THIS amount. Right now it is 100. 

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

     scoreCount += pointsPerSecond * Time.deltaTime; 

     scoreText.text = "" + Mathf.Round (scoreCount); // It comes out as a float with like 6 decimals; I round to an nice, clean Integer 

    } 
} 

Mein Problem, dass ich nicht herausfinden, wie zu lösen ist: Wie kann ich einen Multiplikator zu machen, der die Punktzahl durch mal zwei nach 30 multipliziert Sekunden des Spiels, multipliziert dann das Ergebnis nach drei mal nach 1 Minute, dann mal vier nach 1 Minute und 30 Sekunden, dann endlich mal nach 2 Minuten? Danke :)

Antwort

0

Dies ist eine perfekte Gelegenheit, eine IEnmurator Funktion zu verwenden. Dies sind Methoden, die Sie anrufen können. Sie können sagen, dass Sie eine bestimmte Zeit warten müssen, bevor Sie fortfahren. In Ihrem Fall könnten Sie also eine IEnumerator Funktion haben, die Ihre Punktzahl alle 30 Sekunden multipliziert. Zum Beispiel:

public Text scoreText; 

public float scoreCount; // What the score is when the scene first loads. I set this as zero. 

public float pointsPerSecond; // Every second, the points increase by THIS amount. Right now it is 100. 

private int scoreMultiplier = 1; 

void Start() 
{ 
    StartCoroutine(MultiplyScore()); 
} 

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

    scoreCount += pointsPerSecond * Time.deltaTime; 

    scoreText.text = "" + Mathf.Round (scoreCount); // It comes out as a float with like 6 decimals; I round to an nice, clean Integer 

} 

IEnumerator MultiplyScore() 
{ 
    while(true) 
    { 
     yield return new WaitForSeconds(30); 
     scoreMultiplier++; 
     scoreCount *= scoreMultiplier; 
    } 
} 

Hinweis, wenn Sie nur zu 5-mal gehen Multiplikation können Sie den Punktemultiplikator Variable als Bedingung in Ihrer IEnumerator while-Schleife verwenden, etwa so:

IEnumerator MultiplyScore() 
{ 
    while(scoreMultiplier < 5) 
    { 
     yield return new WaitForSeconds(30); 
     scoreMultiplier++; 
     scoreCount *= scoreMultiplier; 
    } 
} 
4
private float multiplier = 2.0f; 
void Start(){ 
    InvokeRepeating("SetScore", 30f, 30f); 
} 
void SetScore(){ 
    score *= multiplier; 
    multiplier += 1f; 
    if(multiplier > 5.5f) // Added 0.5f margin to avoid issue of float inaccuracy 
    { 
     CancelInvoke() 
    } 
} 

InvokeRepeating setzt den ersten Aufruf (zweiter Parameter) und die Häufigkeit (dritter Parameter), in Ihrem Fall sind es 30s und auch 30s. Sobald der Multiplikator zu groß ist (größer als 5), brechen Sie den Aufruf ab.

Wenn Ihr Multiplikator eine ganze Zahl ist, können Sie den Rand entfernen und eine runde Zahl verwenden.

Verwandte Themen