MVC in Einheit mit skriptfÀhigen Objekten. Teil 2

Fortsetzung der Artikelserie von Cem Ugur Karacam (Teil 1 kann hier gelesen werden ).

Dieses Mal erstellen wir zunĂ€chst mehrere Ansichten fĂŒr die Anzeige eines Inventarobjekts und ein Informationsfenster fĂŒr die Anzeige von Objektparametern. Eine Art primitives Inventar. Dann konzentrieren wir uns auf das Inventarfenster und beenden das Statistikfenster im nĂ€chsten Teil.

Bild

Mal sehen, woraus unsere Arbeit bestehen wird. Wir mĂŒssen:

  • Erstellen Sie visuelle Komponenten fĂŒr Informationen zum Thema und zum Inventar.
  • Erstellen Sie ein Fertighaus des Artikels im Inventar.
  • Inventar mit Ansichten fĂŒllen;
  • Zeigen Sie Informationen in der Konsole an, indem Sie auf die Elementansicht klicken.

Das ist viel. Passen Sie zunÀchst die Bildschirmauflösung an.

Bild

Wir werden Unity-UI-Objekte verwenden. Erstellen Sie eine leere ZeichenflĂ€che (klicken Sie mit der rechten Maustaste in das Hierarchiefenster → BenutzeroberflĂ€che → ZeichenflĂ€che).

Bild

Als NĂ€chstes erstellen Sie zwei Bereiche - Informationen zum Artikel und zum Inventar.
Wir erstellen auch ein Objekt fĂŒr den Hintergrund, nennen es BG und weisen ihm die Komponente Vertikales Layout zu.

Bild

Bild

Bild

Jetzt werden Hintergrundkinder vertikal ausgerichtet.

Lassen Sie uns ein Panel im Hintergrund erstellen.

Bild

In der RectTransform-Komponente legen wir nur die Panel-Höhe auf 300 fest und lassen die Breite automatisch unter der Kontrolle der Vertical Layout-Komponente. Hier sind meine Einstellungen fĂŒr das BG-Objekt:

Bild

Bild

Jetzt duplizieren Sie das Panel und stellen die Höhe auf 440 ein.

Bild

Dann geben wir den Panels die richtigen Namen.

Bild

Es sollte so aussehen:

Bild

Die Geschichte der Arbeit an einem InfoPanel-Objekt wird im nÀchsten Teil fortgesetzt.

Lassen Sie uns eine Ansicht fĂŒr das Inventarelement vorbereiten und als Fertighaus speichern. Erstellen Sie eine SchaltflĂ€che im Bedienfeld. FĂŒgen Sie dem InventoryPanel-Objekt die praktische Grid Layout Group-Komponente hinzu, um die korrekte Anzeige der Elemente im Inventar zu erhalten.

Bild

Nun wird jedes untergeordnete Objekt des Bestandslistenfensters entsprechend den Rastereinstellungen in der Rasterlayoutgruppenkomponente auf dem Bildschirm platziert. Kehren wir zum Button zurĂŒck.

Bild

Die SchaltflĂ€che funktioniert nicht richtig, da wir das Raster noch nicht konfiguriert haben. FĂŒgen Sie vorerst das Bildobjekt der SchaltflĂ€che als untergeordnetes Element des Symbols des Elements hinzu und entfernen Sie das Raycast-Ziel-Flag von der Bildkomponente, damit beim Klicken auf das Bild nicht auf die SchaltflĂ€che geklickt wird.

Bild

Kopieren Sie nun den Button mehrmals. FĂŒr diese Lektion reichen vier Exemplare. So sollte es aussehen:

Bild

Bevor wir fortfahren, mĂŒssen wir ein Skript erstellen, um das Thema darzustellen. Er ist fĂŒr das Speichern von Informationen zum Inventargegenstand selbst verantwortlich und reagiert auf das Klicken auf die SchaltflĂ€che (wir beschrĂ€nken uns vorerst darauf, den Befehl Debug.Log in der Konsole anzuzeigen).

Erstellen Sie ein neues Skript und nennen Sie es ItemView.

Bild

ItemView ist fĂŒr die Datenspeicherung, die visuelle Darstellung, die Klickverarbeitung und den Anfangszustand vor dem Laden der Daten verantwortlich.

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class ItemView : MonoBehaviour { public Button button; public Image ItemIcon; private ItemData itemData; } 

Erstellen Sie eine Methode zum Festlegen des Anfangszustands.

 using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class ItemView : MonoBehaviour { public Button button; public Image itemIcon; private ItemData itemData; public void InitItem(ItemData item) { this.itemData = item; button.onClick.AddListener(ButtonClicked); } private void ButtonClicked() { Debug.Log(itemData.name); } } 

Ich denke, fĂŒr unser Projekt benötigen Sie mehrere Symbole. Ich habe ein kostenloses Kit im Asset Store gefunden. FĂŒgen wir es dem Projekt hinzu.

Bild

Jetzt können Sie eine Variable hinzufĂŒgen, die das Symbol fĂŒr das Element in der ItemData- Klasse speichert.

 using UnityEngine; [CreateAssetMenu] public class ItemData : ScriptableObject { public string itemName; public ItemType type; public float attack; public Sprite icon; public float GetPrice() { return attack * 40; } } public enum ItemType { Dagger, Axe, Hammer, Potion } 

Jetzt können wir in ItemView der Ansicht ein Symbol hinzufĂŒgen.

 public void InitItem(ItemData item) { this.itemData = item; itemIcon.sprite = itemData.icon; button.onClick.AddListener(ButtonClicked); } 

FĂŒgen Sie der SchaltflĂ€che in der Szene ein Skript hinzu und benennen Sie das Objekt mit der SchaltflĂ€che in Element um. Danach weisen wir ein ImageIcon-Objekt im ItemIcon-Feld zu.

Bild

Löschen Sie die verbleibenden drei SchaltflÀchen, da sie zum Konfigurieren des Rasters benötigt wurden, und speichern Sie das Objekt Item als Fertighaus, indem Sie es in das Projektfenster ziehen.

Bild

Die PrĂ€sentation ist fast fertig. Wir benötigen 4 Artikel, um das Inventar zu fĂŒllen. Wir werden Symbole fĂŒr die Modelle erstellen und zuweisen, die wir in der vorherigen Lektion erstellt haben.

Bild

Fertig Erstellen Sie nun ein ItemViewController- Skript .

 using System.Collections; using System.Collections.Generic; using UnityEngine; public class ItemViewController : MonoBehaviour { public Inventory inventoryHolder; public Transform inventoryViewParent; public GameObject itemViewPrefab; private void Start() { foreach (var item in inventoryHolder.inventory) { var itemGO = GameObject.Instantiate(itemViewPrefab, inventoryViewParent); itemGO.GetComponent<ItemView>().InitItem(item); } } } 

Wir haben also einen Link zu dem Inventar, in dem im Projektordner erstellte ItemData gespeichert sind , einen Link zu InventoryPanel , um Ansichten als untergeordnete Elemente dieses Bedienfelds zu erstellen, und einen Link zu dem Fertighaus, das die Ansicht des Elements selbst enthÀlt.

Erstellen Sie nun in der Start- Methode eine Instanz der PrĂ€sentation des Elements und rufen Sie die InitItem- Methode auf, um die PrĂ€sentationsdaten mit Daten aus dem Modell fĂŒr jedes Inventarelement zu fĂŒllen.

Erstellen Sie schließlich ein leeres Objekt in der Szene, hĂ€ngen Sie das Steuerungsskript daran an und weisen Sie den erforderlichen Objekten in der Szene VerknĂŒpfungen zu.

Bild

Stellen Sie sicher, dass alle Artikel im Inventar zugeordnet sind.

Bild

Wir haben ziemlich viel gemacht. Nun wollen wir sehen, wie alles funktioniert.

Bild

Elemente erstellt, aber ich habe vergessen, das Textobjekt von der SchaltflĂ€che zu entfernen. In Unity werden SchaltflĂ€chen standardmĂ€ĂŸig mit Text erstellt. Öffnen Sie das Fertighaus, das wir im Projekt gespeichert haben, und löschen Sie das Textobjekt. Speichern Sie dann das Fertighaus und kehren Sie zur Szene zurĂŒck.

Bild

Jetzt nochmal testen.

Bild

Herzlichen GlĂŒckwunsch, alles funktioniert.

Im nÀchsten Teil werden wir uns mit dem Informationspanel befassen.

Source: https://habr.com/ru/post/de478602/


All Articles