Maison >développement back-end >C++ >Pourquoi mon script Unity Game Manager ne s'exécute-t-il qu'une seule fois ?

Pourquoi mon script Unity Game Manager ne s'exécute-t-il qu'une seule fois ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-14 07:01:47926parcourir

Why Does My Unity Game Manager Script Only Run Once?

Dépannage d'Unity Game Manager : problème d'exécution unique

Aperçu du problème

Dans le développement de jeux Unity, un gestionnaire de jeu persistant à travers les scènes est crucial. Cependant, un problème courant est un script qui ne s'exécute qu'une seule fois au début, malgré sa présence dans toutes les scènes.

La cause profonde : scène de préchargement manquante

Unity ne dispose pas d'un mécanisme de préchargement automatique. Sans une scène de préchargement dédiée, l'initialisation de votre gestionnaire de jeu et les composants essentiels ne survivront pas aux transitions de scène.

La solution : implémenter une scène de préchargement

Voici comment résoudre ce problème :

  1. Créez une scène de préchargement : Ajoutez une nouvelle scène (par exemple, "Préchargement") et définissez-la comme scène 0 dans vos paramètres de construction.
  2. Ajouter un objet de jeu : Dans la scène "Préchargement", créez un objet de jeu vide nommé "_app".
  3. Activer « Ne pas détruire au chargement » : Dans l'inspecteur de « _app », cochez la case « Ne pas détruire au chargement ».

Attachement des composants de Game Manager

Toutes les fonctionnalités principales de votre gestionnaire de jeu (connexions à la base de données, gestion du son, suivi des scores, etc.) doivent être attachées en tant que composants au GameObject "_app" dans votre scène de préchargement. Cela garantit leur persistance dans toutes les scènes suivantes.

Accès aux objets de jeu à partir d'autres scripts

Deux méthodes existent pour accéder aux objets du jeu à partir d'autres scripts :

Méthode 1 : FindObjectOfType

Utilisez ceci dans la méthode Awake() de votre script :

<code class="language-C#">Sound sound = Object.FindObjectOfType<Sound>();
Game game = Object.FindObjectOfType<Game>();</code>

Méthode 2 : Variables globales statiques (plus efficaces)

Une approche plus rationalisée utilise des variables globales statiques :

<code class="language-C#">public static class GameManager
{
    public static Sound sound;
    public static Game game;

    static GameManager()
    {
        GameObject app = GameObject.Find("_app");

        sound = app.GetComponent<Sound>();
        game = app.GetComponent<Game>();
    }
}</code>

Résumé

En créant une scène de préchargement et en attachant les composants de votre gestionnaire de jeu à un GameObject persistant, vous garantissez une exécution cohérente dans toutes vos scènes Unity. Choisissez la méthode d'accès aux objets qui convient le mieux à votre style de codage.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn