Address
304 North Cardinal St.
Dorchester Center, MA 02124

Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM

Unity stonks

Unity Le meilleur conseil pour débuter

Aujourd’hui marque sept ans depuis que j’ai entrepris mon voyage avec le moteur de jeu Unity.
Je fais partie de la grande famille des développeurs indépendant.

Ce n’est pas ma profession principale, mais plutôt une grande passion.

Voici le conseil le plus précieux que je puisse offrir pour vous faire gagner du temps dans vos efforts de développement de jeux.

Ce conseil est universel, mais il a une importance particulière dans le domaine des jeux vidéo.

Les caractéristiques d’un jeu

Chaque jeu a ses caractéristiques uniques, mais ils passent tous par des étapes distinctes.
Par exemple, dans un jeu où la monnaie virtuelle se présente sous forme de pièces d’or, vous commencez généralement avec zéro.
Ensuite vous gagnez des pièces en tuant des monstres, ce qui vous permet d’acheter de l’équipement.
Epic seven secret shop

Epic seven – secret shop

Dans un autre type de jeu, comme un jeu de plateforme de style Mario, vous commencez au début du niveau.
Mais à mesure que vous progressez, vous pouvez atteindre des points de contrôle pour éviter de recommencer depuis le début après une erreur.
Mario world checkpoint

Mario world – checkpoint

Ainsi, en tant que développeurs, nous devons constamment ajuster ces états pour effectuer divers tests.

En prenant les exemples précédents, il est beaucoup plus simple de commencer le jeu avec, disons, 1000 pièces pour examiner si notre système d’achat fonctionne efficacement.

Cela évite la nécessité de jouer pour gagner des pièces et ensuite acheter de l’équipement. De même, pour le jeu de plateforme, il est plus pratique de ne pas recommencer depuis le début du niveau à chaque test de segments.

Le conseil

Ce conseil est simple : « Ne soyez pas paresseux. »

Par cette expression quelque peu franche, je veux dire que nous devons construire des ponts pour nous faciliter la vie au lieu de répéter des tâches manuelles.

Lors de la vérification d’une fonctionnalité spécifique, nous devons d’avantage nous focaliser sur cet aspect plutôt que de tester l’ensemble du processus qui y mène ; cette approche peut vous faire gagner un temps considérable.

Application du conseil

Au début, il peut être tentant de modifier directement différents états dans le code ou dans l’inspecteur. Par exemple, si vous avez une classe avec une propriété qui stocke votre or, vous pouvez changer la valeur dans l’inspecteur :

using UnityEngine;

public class GameBootstrap : MonoBehaviour
{
    public int gold;
}

Inspecteur de MonoBehaviour Unity

Cela peut sembler être une bonne solution initiale pour gagner du temps, au lieu de jouer pour gagner de l’or.

Cependant, en réalité, laisser ce champ tel quel n’est pas une pratique courante. Au lieu de cela, on préférera appeler une fonction (ou modifier directement le getter) pour modifier la valeur des pièces, puis invoquer un événement :

using UnityEngine;

public class GameBootstrap : MonoBehaviour
{
    public int Gold { get; private set; }

    public UnityAction OnGoldChange { get; set; }

    // nous créons une instance statique de la classe pour une gestion plus facile.
    public static GameBootstrap Instance { get; private set; }

    private void Awake()
    {
        Instance = cette instance;
    }

    public void AddGold(int valeur)
    {
        Gold += valeur;
        OnGoldChange?.Invoke(Gold);
    }
}

Cependant, avec ce code, vous ne pouvez pas modifier directement la valeur de l’or dans l’inspecteur.

Implémentation d’une barre de dev.

Plusieurs solutions existent pour résoudre ce problème, mais la plus adaptée dans ce cas est de créer une barre de ‘mode développeur’ où vous pouvez modifier l’état du jeu.

Création Monobehaviour

Commençons par créer notre interface utilisateur.

  1. Construisez un canvas avec un conteneur (un gameObject avec un composant image).
  2. Ajoutez un champ de saisie avec un bouton.
  3. Ensuite, créez une classe ‘DevBar’ pour interagir avec l’interface utilisateur.

Note: ne pas placer ce fichier dans un dossier ‘Editor‘.

#if UNITY_EDITOR
using UnityEngine;
using TMPro;
using UnityEngine.UI;

public class DevBar : MonoBehaviour
{
    [SerializeField]
    private TMP_InputField _inputCoinField;

    [SerializeField]
    private Button _buttonCoin;

    public static DevBar Instance { get; private set; }

    private void Awake()
    {
        Instance = cette instance;
        // Nous avons besoin de la DevBar, même si nous changeons de scène
        DontDestroyOnLoad(this);
    }

    private void Start()
    {
        // J'aime toujours nettoyer les événements avant d'en ajouter un.
        _buttonCoin.onClick.RemoveAllListeners();
        _buttonCoin.onClick.AddListener(SoumettrePiece);
    }

    public void Basculer()
    {
        gameObject.SetActive(!gameObject.activeSelf);
    }

    private void SoumettrePiece()
    {
        // Vérifiez si le texte d'entrée est un entier valide
        if (!int.TryParse(_inputCoinField.text, out int pièce))
        {
            Debug.LogError("Impossible d'ajouter des pièces");
            return;
        }

        GameBootstrap.Instance.AddGold(pièce);
    }
}
#endif

Vous remarquerez que cette classe commence par la condition ‘#IF_UNITY_EDITOR’ pour garantir que ce script ne sera jamais présent dans une version finale.

Si vous souhaitez que je montre la manière d’implémenter cette ‘DevBar’ dans une version finale, n’hésitez pas à me le faire savoir dans les commentaires.

Ensuite, ajoutez ce MonoBehaviour à votre canvas.
Assurez-vous qu’il a une priorité d’affichage élevée pour que la DevBar apparaisse toujours devant les autres éléments de l’interface utilisateur.
Liez les éléments du bouton et du champ de saisie dans la hiérarchie.

Vous pouvez également attribuer la balise ‘EditorOnly’ au canvas pour empêcher ce gameObject d’apparaître dans une version finale (au cas où vous oublieriez de le supprimer d’une scène).
Inspecteur de Canvas Unity

Désactivez maintenant le gameObject contenant votre canvas.
Définissez-le comme un prefab.

Vous pouvez le placer dans un dossier ‘Prefab’ pour une meilleure organisation. Enfin, supprimez le canvas de la scène.

Création script éditeur

Pour ouvrir cette DevBar pendant le jeu, créez un script nommé ‘MenuBarEditor’ dans le dossier ‘Editor’. Je fournirai un lien vers la documentation de MenuItem.

using UnityEditor;
using UnityEngine;

public static class MenuBarEditor
{
    // chemin du menu de la DevBar, la touche TAB est utilisée comme raccourci
    const string NomDevBar = "Utilitaire/Dev Barre _TAB";

    [MenuItem(NomDevBar)]
    public static void BasculerDevBarre()
    {
        // nous ne pouvons pas ouvrir la DevBarre dans l'éditeur
        if (!Application.isPlaying)
        {
            retour;
        }

        // première initialisation
        if (DevBar.Instance == null)
        {
            InvoquerDevBarre();
            retour;
        }

        Basculer(DevBar.Instance);
    }

    private static void InvoquerDevBarre()
    {
        // charge le prefab, met le bon chemin
        var prefabDevBarre = AssetDatabase.LoadAssetAtPath<DevBar>("Assets/Prefab/DevBarCanvas.prefab");
        var devBarre = Object.Instantiate(prefabDevBarre);

        Basculer(devBarre);

        // Lors de la sortie, nous voulons que l'élément de menu cochée disparaisse
        Application.quitting += EnQuittant;
    }

    private static void Basculer(DevBar devBarre)
    {
        devBarre.Basculer();

        // ajouter ou supprimer la coche pour une meilleure visualisation
        Menu.SetChecked(NomDevBar, devBarre.gameObject.activeSelf);
    }

    private static void EnQuittant()
    {
        Application.quitting -= EnQuittant;
        Menu.SetChecked(NomDevBar, faux);
    }
}

Grâce à ce code, vous pouvez ouvrir la DevBarre en appuyant sur la touche TAB ou en passant par le menu ‘Utilitaire/Dev Barre’.
Menu de la DevBar Unity

Vous pouvez maintenant facilement ajouter de l’or pendant votre jeu.

Ceci n’était qu’un exemple, mais vous pouvez appliquer ce principe à des scénarios bien plus complexes et chronophages.

Cela dépendra des différentes caractéristiques de votre jeu.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *