In meinem Spiel gibt es eine Punktzahl. Wenn ein Objekt kollidiert, wird der Punktzahl ein festgelegtes Inkrement hinzugefügt. Es gibt eine Anzeigetafel. Was in meinem Spiel passiert, ist, dass wenn ein Objekt kollidiert, es die Anzeigetafel entführt, um nur die eigene Personenhistorie der Punktzahlen anzuzeigen. Wenn das nächste Objekt kollidiert, übernimmt es die Anzeigetafel und zeigt seine eigene persönliche Geschichte. Ich versuche, die Amalgamat-Punktzahl aller zusammengestellten Objekte zu zeigen, wobei jedes seinen Teil zu einer Gesamtsumme beiträgt.

void OnCollisionEnter (Collision col)
{
    if(col.gameObject.name == "Plane")
    {
        score += 50;
        textMeshComponent = GameObject.Find ("Score").GetComponent<TextMesh> ();
        textMeshComponent.text = score.ToString ();

    }
}

Es gibt 10 von (col.gameObject.name) und es gibt eine "Ebene", mit der alle interagieren.

Wie kann ich die Partitur zu einem Konglomerat machen, wie ich es beschrieben habe? Ich bin wirklich ratlos, wie man die (col.gameObject.name) Seite dieser Gleichung manipuliert.

Danke für deinen Rat.

1
user4335126 23 Dez. 2015 im 07:56

3 Antworten

Beste Antwort

Machen Sie score zu einem Mitglied von Plane anstelle von this und machen Sie es zu public, damit alle anderen gameObjects es erhalten können.

Sie können eine Punktzahl auch als eigenes gameObject erstellen oder ein gameObject erstellen, das alle globalen Elemente enthält.

0
AustinWBryan 23 Dez. 2015 im 05:34

Lassen Sie mich einen anderen Ansatz vorschlagen, obwohl dies nicht empfohlen wird. TextMeshComponent.text = (score + (int.Parse (textMeshComponent.text))). ToString (); Jetzt werden Punkte als Ganzes hinzugefügt, unabhängig davon, ob jedes Spielobjekt seinen eigenen zum Hauptwert hinzufügt

0
LumbusterTick 23 Dez. 2015 im 05:59

Stellen Sie sich ein Objekt in Ihrer Szene vor, dessen einziges Anliegen darin besteht, die Punktzahl zu zählen (und möglicherweise anzuzeigen). Nennen wir es ScoreController.

Immer wenn ein Ereignis eintritt, für das Sie dem Spieler eine Punktzahl verleihen möchten, ruft der verantwortliche Code einfach Ihren ScoreController auf und teilt ihm mit, wie viel Punktzahl vergeben werden soll.

Ihr ScoreController GameObject verfügt möglicherweise über ein Skript wie das folgende:

public class ScoreController : MonoBehaviour
{
    public TextMesh scoreDisplay;

    public int Score { get; private set; }

    void Start()
    {
        UpdateView();
    }

    public void AwardScore(int amount)
    {
        Score += amount;
        UpdateView();
    }

    private void UpdateView()
    {
        scoreDisplay.text = Score.ToString();
    }
}

Jetzt kann ein anderer Code durch Aufrufen Punkte vergeben

GameObject.FindObjectOfType<ScoreController>().AwardScore(123);

Wenn Sie sich über verwandte Themen informieren möchten, lesen Sie das Entwurfsmuster Model-View-Control und SoC (Trennung von Bedenken).

0
Thomas Hilbert 23 Dez. 2015 im 22:06