MVC dans Unity avec des objets scriptables. 2e partie

Suite de la série d'articles de Cem Ugur Karacam (la partie 1 peut être lue ici ).

Cette fois, nous allons commencer par créer plusieurs vues pour afficher un objet d'inventaire et un panneau d'informations pour afficher les paramètres de l'objet. Une sorte d'inventaire primitif. Ensuite, nous nous concentrerons sur la fenêtre d'inventaire, et nous terminerons la fenêtre de statistiques dans la partie suivante.

image

Voyons en quoi consistera notre travail. Nous devons:

  • créer des éléments visuels pour l'information sur le sujet et l'inventaire;
  • créer un préfabriqué de l'article en inventaire;
  • remplir l'inventaire de vues;
  • afficher des informations dans la console en cliquant sur la vue de l'élément.

C’est beaucoup. Tout d'abord, ajustez la résolution de l'écran.

image

Nous utiliserons les objets Unity UI. Créez un canevas vide (clic droit dans la fenêtre de hiérarchie → UI → Canvas).

image

Ensuite, créez deux panneaux - des informations sur l'article et l'inventaire.
Nous créons également un objet pour l'arrière-plan, appelons-le BG et affectons-lui le composant Disposition verticale.

image

image

image

Les enfants d'arrière-plan seront désormais alignés verticalement.

Créons un panneau à l'intérieur du BG.

image

Dans le composant RectTransform, nous définissons uniquement la hauteur du panneau - 300 et laissons la largeur automatique, sous le contrôle du composant Disposition verticale. Voici mes paramètres pour l'objet BG:

image

image

Maintenant, dupliquez le panneau et définissez la hauteur sur 440.

image

Ensuite, nous donnons aux panneaux les noms corrects.

image

Cela devrait ressembler à ceci:

image

L'histoire du travail sur un objet InfoPanel se poursuivra dans la partie suivante.

Préparons une vue pour l'article d'inventaire et l'enregistrons en tant que préfabriqué. Créez un bouton à l'intérieur du panneau. Pour obtenir l'affichage correct des éléments dans l'inventaire, ajoutez le composant pratique Grid Layout Group à l'objet InventoryPanel.

image

Désormais, chaque objet enfant du panneau d'inventaire sera placé à l'écran en fonction des paramètres de la grille dans le composant Grid Layout Group. Revenons au bouton.

image

Le bouton ne fonctionne pas correctement car nous n'avons pas encore configuré la grille. Pour l'instant, ajoutez l'objet Image au bouton en tant qu'enfant de l'icône de l'élément et supprimez l'indicateur Raycast Target du composant Image afin que le fait de cliquer sur l'image ne provoque pas un clic sur le bouton.

image

Copiez maintenant le bouton plusieurs fois. Quatre exemplaires suffiront pour cette leçon. Voici à quoi cela devrait ressembler:

image

Avant de continuer, nous devons créer un script pour représenter le sujet. Il sera responsable du stockage des informations sur l'élément d'inventaire lui-même et répondra en cas de clic sur le bouton (pour l'instant, nous nous limiterons à afficher la console avec la commande Debug.Log).

Créez un nouveau script et appelez-le ItemView.

image

ItemView est responsable du stockage des données, de la présentation visuelle, du traitement des clics et de l'état initial avant le chargement des données.

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; } 

Créez une méthode pour définir l'état initial.

 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); } } 

Je pense que pour notre projet, vous aurez besoin de plusieurs icônes. J'ai trouvé un kit gratuit sur Asset Store. Ajoutons-le au projet.

image

Vous pouvez maintenant ajouter une variable qui stockera l'icône de l'élément dans la classe ItemData.

 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 } 

Maintenant, dans ItemView, nous pouvons ajouter une icône à la vue.

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

Ajoutez un script au bouton de la scène et renommez l'objet avec le bouton en élément. Après cela, nous assignerons un objet ImageIcon dans le champ ItemIcon.

image

Supprimez les trois boutons restants, car ils étaient nécessaires pour configurer la grille, et enregistrez l'objet Item en tant que préfabriqué en le faisant glisser vers la fenêtre du projet.

image

La présentation est presque terminée. Nous avons besoin de 4 articles pour remplir l'inventaire. Nous allons créer et affecter des icônes aux modèles comme nous l'avons fait dans la leçon précédente.

image

C'est fait. Créez maintenant un script ItemViewController.

 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); } } } 

Nous avons donc un lien vers l'inventaire qui stocke ItemData créé dans le dossier du projet, un lien vers InventoryPanel pour créer des vues en tant qu'enfants de ce panneau et un lien vers le préfabriqué qui contient la vue de l'élément lui-même.

Maintenant, dans la méthode Start , créez une instance de la présentation de l'article et appelez la méthode InitItem pour remplir les données de présentation avec les données du modèle pour chaque article d'inventaire.

Enfin, créez un objet vide dans la scène, attachez-lui le script du contrôleur et affectez des liens aux objets requis dans la scène.

image

Assurez-vous que tous les articles sont attribués dans l'inventaire.

image

Nous avons fait beaucoup. Voyons maintenant comment tout fonctionne.

image

Éléments créés, mais j'ai oublié de supprimer l'objet Texte du bouton. Dans Unity, les boutons sont créés par défaut avec du texte. Ouvrez le préfabriqué que nous avons enregistré dans le projet et supprimez l'objet Texte. Enregistrez ensuite le préfabriqué et revenez à la scène.

image

Maintenant, testez à nouveau.

image

Félicitations, tout fonctionne.

Dans la partie suivante, nous traiterons du panneau d'information.

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


All Articles