Advanced Unity Architect: Architektur und Design des Red Dot Systems

In Interviews werde ich oft gefragt, wie man ein Red-Dot-System entwirft. In diesem Artikel wird detailliert beschrieben, wie man ein Red-Dot-System entwirft, welche Schnittstellen es hat, und eine vollständige Implementierung geben.

Anforderungsanalyse des Red Dot Systems

Lassen Sie uns zunächst die Designanforderungen des Red Dot-Systems analysieren: Streng genommen gehört das Red Dot-System nicht zum Framework, sondern zur Spiellogik, daher sollte der Code nicht in ein allgemeines Framework eingeordnet werden, da er nicht dazu gehört zur Grundversorgung. Es soll eine gute Erinnerung an unverarbeitete Informationen bei der Entwicklung von Spiellogik sein. Sie hoffen, dass das Red Dot-System den Benutzern direkt Schnittstellen und Dienste zur Verfügung stellen und Red Dots problemlos unter bestimmten Knoten anzeigen und an bestimmten Orten festlegen kann. Benutzer müssen sich nicht um das „Aussehen“ roter Punkte, die Erstellung roter Punkte, die Leistung beim wiederholten Erstellen und Zerstören roter Punkte usw. kümmern.

Rechts! Hier gibt es eine Spieleentwicklungs-Austauschgruppe , in der sich eine Gruppe von Anfängern versammelt, die gerne Spiele lernen, sowie einige technische Experten, die sich mit der Spieleentwicklung beschäftigen. Sie sind herzlich eingeladen, vorbeizukommen, sich auszutauschen und zu lernen.

Aus der Bedarfsanalyse wird geschlossen, dass die externen Schnittstellen, die das „Red Dot System“ bereitstellt, wie folgt sind:

1: Schreiben Sie die Schnittstelle „CreateRedPoint“, um einen „roten Punkt“-Knoten zu erstellen und den Knoten an den Benutzer zurückzugeben. Der Benutzer entscheidet, wo der rote Punkt platziert werden soll;

2: Schreiben Sie die Schnittstelle „DestroyRedPoint“, um einen roten Punktknoten zu löschen und zu zerstören;

3: Schreiben Sie die Schnittstelle „SetRedPointValue“, übergeben Sie den roten Punktknoten und legen Sie dann den spezifischen Wert im roten Punkt fest.

4: Schreiben Sie die Schnittstelle „DestroyAllRedPoints“, die zum Löschen und Recyceln aller roten Punkte unter der UI-Schnittstelle verwendet wird, wenn diese zerstört wird.

Da das „Red Dot System“ häufig Knoten erstellt und löscht, übernimmt es intern den Knotenpoolmodus, der die Leistung maximieren kann.

Grundlegende Dienste, auf die das Red Dot-System angewiesen ist

Das Red Dot-System ist nicht vollständig unabhängig und basiert auf den grundlegenden Diensten des Frameworks. Eine davon ist die Ressourcenverwaltung, die hauptsächlich für das Laden von Red Dot-Knotenressourcen verantwortlich ist, und die andere ist das Knotenpool-Verwaltungsmodul. Der Beispielcode des Ressourcenverwaltungsmoduls verwendet YooAssets. Anschließend werden die Red Dot-Knoten in Fertigteile umgewandelt, dann über YooAssets gesammelt und verpackt und anschließend werden die Knotenressourcen über Code geladen. Das Red-Point-System basiert intern auf dem Node-Pool-Mechanismus, daher muss für den Red-Point-Knoten ein eindeutiger Node-Pool erstellt werden.

Version von YooAssets: 1.5.2

Ressourcenverwaltung ResMgr: synchrone/asynchrone Ressourcenverwaltung basierend auf YooAssets

Knotenpool: Implementieren Sie es selbst. Weitere Informationen finden Sie im Code.

Vorgefertigter Red-Point-Knoten: Unter dem RedPoint-Knoten befinden sich zwei untergeordnete Knoten, ein roter kreisförmiger Elf und eine Textbeschriftung, die zum Anzeigen von Zahlen verwendet werden, wie in der folgenden Abbildung dargestellt:

Spezifische Implementierung des Red Dot-Systemcodes

Schreiben Sie eine RedPointFlag-Komponente, die von Component geerbt ist, um zu markieren, welche Knoten rote Punkte sind. Die Funktion dieser Komponente besteht darin, diese Flag-Komponente zu verwenden, um alle „roten Punkte“ zu finden, wenn eine UI-Schnittstelle zerstört wird, und sie gemeinsam zu recyceln.

öffentliche Klasse RedPointFlag: Komponente

{

}

Schreiben Sie einen globalen Singleton von RedPointMgr, um den „Red Point“-Dienst bereitzustellen. Stellt die Init-Schnittstelle bereit. Während der Init wird ein Knotenpool für den Red Dot erstellt. Code wie folgt anzeigen:

öffentliche Klasse RedPointMgr: UnitySingleton<RedPointMgr>

{

public void Init() {

NodePoolMgr.Instance.AddNodePool("GUI/Prefabs/RedPoint.prefab", 10);

}

}

CreateRedPoint-Schnittstelle:

öffentliches GameObject CreateRedPoint() {

GameObject redPoint = NodePoolMgr.Instance.Get("GUI/Prefabs/RedPoint.prefab");

if (redPoint.GetComponent<RedPointFlag>() == null) {

redPoint.AddComponent<RedPointFlag>();

}

return redPoint;

}

Dieser Schnittstelle sollte besondere Aufmerksamkeit gewidmet werden. Wir fügen dem roten Punktknoten eine RedPointFlag-Komponenteninstanz hinzu, um später das Auffinden aller roten Punkte zu erleichtern.

SetRedPointValue-Schnittstelle:

public void SetRedPointValue(GameObject redPoint, int value) {

var label = redPoint.GetComponentInChildren<Text>();

label.text = value.ToString();

}

Es wird verwendet, um den entsprechenden Anzeigewert für den roten Punkt festzulegen. Das Prinzip ist relativ einfach: Suchen Sie einfach die Textkomponente im roten Punkt und ändern Sie den Anzeigeinhalt der Textkomponente.

DestroyRedPoint-Schnittstelle:

öffentliche Leere DestroyRedPoint(GameObject redPoint) {

NodePoolMgr.Instance.Recycle("GUI/Prefabs/RedPoint.prefab", redPoint);

}

Löschen Sie einen roten Punkt. Dies dient hauptsächlich dazu, das Knotenpool-Recycling aufzurufen.

DestroyAllRedPoint-Schnittstelle:

public void DestroyAllRedPoint(GameObject uiRoot) {

RedPointFlag[] redPoints = uiRoot.GetComponentsInChildren<RedPointFlag>();

for (int i = 0; i < redPoints.Length; i++) {

NodePoolMgr.Instance.Recycle("GUI/Prefabs/RedPoint.prefab", redPoints[i].gameObject);

}

}

Löschen Sie alle roten Punkte. Hier verwenden wir die RedPointFlag-Komponente. Durch das Herausfiltern aller Knoten mit dieser Komponente erhalten wir unsere roten Punktknoten. Dann recyceln Sie einfach alle Knoten.

Als nächstes geben wir ein einfaches Anwendungsbeispiel. Es ist sehr einfach und bequem zu verwenden. Erstellen Sie einen roten Punkt im UI-Code und löschen Sie alle roten Punkte, wenn die Schnittstelle zerstört wird:

öffentliche Klasse UIHomeCtrl: MonoBehaviour

{

// Start wird vor dem ersten Frame-Update aufgerufen

void Start()

{

Transform root = this.transform.Find("Bottom/start/btnStart");

var redPoint = RedPointMgr.Instance.CreateRedPoint();

redPoint.transform.SetParent(root, false);

redPoint.transform.localPosition = new Vector3(120, 40, 0);

RedPointMgr.Instance.SetRedPointValue(redPoint, 20);

}

private void OnDestroy()

{

RedPointMgr.Instance.DestroyAllRedPoint(this.gameObject);

}

}

Das war’s für das heutige Teilen. Wenn Sie den vollständigen Code benötigen, können Sie uns folgen und den vollständigen Code erhalten.“

Ich denke du magst

Origin blog.csdn.net/voidinit/article/details/135884026
Empfohlen
Rangfolge