Je suis confronté à des problèmes liés à la commande d'exécution des scripts et ce point est hors de mon esprit si je suis un développeur d'unité expérimenté. Donc, je voudrais une explication concernant cela.
Ceci est mon code de script menucontoller: p> Ceci est mon code de script Gamemanager: P> public class GameManager : MonoBehaviour
{
private static GameManager instance;
//
private int levelIndex;
private int gameScore;
private int playerLives;
void Awake()
{
instance = this;
}
public static GameManager Instance
{
get
{
return instance;
}
}
}
3 Réponses :
Vous n'avez pas correctement implémenté le modèle Singleton, vous devez prendre en compte les conditions de course, notamment en ce qui concerne les fonctions d'événement de l'unité. Un comportement correct du singleton, crée une instance si on n'existe pas, vous permet également de progresser singleton prédéfini avec des champs prédéfinis, également plus facile à mettre en œuvre d'autres singletons sans répéter votre code (Boiserie):
public class GameManager : SingletonPattern<GameManager>
{
}
Dans le code que vous avez montré, essayez d'obtenir une instance de quelque chose nommé Ce que vous devriez faire est Pour avoir un objet de jeu dans votre scène avec Dans puis accédez aux fonctions du script SoundManager, comme ceci: p> Pour convertir le Gamemanager en un singleton (utiliser Ceci comme référence): p> et deuxième chose à prendre en compte, n'utilisez pas gamemanager code> mais plus tard, le script ci-dessous est nommé SoundManager code>. SoundManager CODE> Script sur elle. P> MainmenController code> Faites une référence à ce jeuObject. Par exemple, sérialiser ce champ: p> instase code > avec des capitales dans init () code>. Au lieu de: p>
Désolé, ByMistake J'ai ajouté un code de classe incorrect mais je suis maintenant modifié la question.
Je souhaite accéder à la classe via une variable d'instance singleton.
Fondamentalement, il s'agit d'un jeu de scène unique et d'une première exécution, l'exception de référence NULL est affichée dans la console. Donc, il n'y a aucune chance de multiples instances de script Gamemanager selon ma compréhension ...
Votre question est la suivante: pourquoi onenable () exécutée avant l'éveil () dans d'autres scripts, non? p>
Si oui, alors je pense que ma réponse vous aidera, p>
J'ai fait face à ce problème à plusieurs reprises, et je pense que cela se passe à cause des nombreux scripts de la scène et des nombreux scripts sur le même "objet de jeu", donc à cause de ces scripts courants dans des cadres de déférents comme parfois Il est nécessaire de mettre en place 2 ou 3 images pour mettre fin à l'exécution, c'est pourquoi dans certains objets de jeu, la méthode éveillée et la méthode onenable s'effectue dans le cadre 1 et dans d'autres gagjects Les méthodes éveillées sont exécutées dans le cadre 2 ou 3. P>
Pour résoudre ce problème, je supprime généralement toutes les méthodes onenables de tous les scripts en sous-galisObjects et l'unite dans un ou plusieurs scripts principaux de la partie mère GameObjects, par exemple. Le script de Game Manager a une méthode onérable, j'ai écrit à l'intérieur de tout le code que je veux exécuter dans d'autres sous-scripts en le référant à l'intérieur du gestionnaire de jeux. p>
Vous avez totalement obtenu ce que j'ai fait face récemment. Merci mec! Votre réponse m'a aidé à visualiser le problème exact et je l'ai résolu avec une coroutine à l'aide de Watiletil (() => autresObject.instance! = Null); Et puis faire mon truc dans cette coroutine. Ça a marché comme sur des roulettes. Merci encore pour votre aide MA Man.
On dirait un bug pour moi, quelle version de l'unité est-ce?
Version Unity 2018.4.9f1
Notez-vous que vous n'avez pas fourni le script Gamemanager.
J'ai déjà ajouté un script Gamemanager à un gameObject ...
Ajouter le code Gamemanager ici