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.
3 Antworten
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.
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
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).
Neue Fragen
c#
C # (ausgesprochen "siehe scharf") ist eine statische Typisierungsprogrammiersprache mit mehreren Paradigmen, die von Microsoft entwickelt wurde. C # -Code zielt normalerweise auf die .NET-Tools und -Laufzeiten von Microsoft ab, zu denen unter anderem .NET Framework, .NET Core und Xamarin gehören. Verwenden Sie dieses Tag für Fragen zu Code, der in der formalen Spezifikation von C # oder C # geschrieben ist.