2016-03-17 1 views
1

Je souhaite créer un jeu RTS dans Unity version 5.3.xxx. Je veux avoir un menu déroulant pour sélectionner le niveau que je veux jouer. Je ne veux pas le coder en dur alors comment puis-je obtenir les noms de scène à l'exécution? Ceci est nécessaire pour ajouter de nouveaux niveaux ingame. C'est la question suivante alors. Comment puis-je créer de nouvelles scènes et les ajouter pour construire un chemin à l'exécution pour les utiliser en jeu? par exemple dans un éditeur de carte?Obtention de noms de scène lors de l'exécution/Création de scènes lors de l'exécution

Je ne peux pas utiliser le UnityEditor de passer par toutes les scènes avec foreeach, parce que sa classe d'éditeur et ceux-ci n'obtiennent pas dans la version finale ..

Merci

+0

Vous ne créez pas de nouvelles scènes et vous les ajoutez lors de l'exécution. Vous utilisez l'interface utilisateur de Unity et les événements de clic de bouton, que vous pouvez ensuite faire 'scenemanager.loadscene' dans la fonction de rappel de bouton. Regardez les tutoriels de l'interface utilisateur. –

Répondre

1

Au 5.x l'unité, il sont des options beaucoup plus robustes pour gérer les scènes à l'exécution.

Obtenir le nom actuel de la scène:

SceneManager.GetActiveScene().name


Obtenir une liste de tous les noms de scène ajoutés à la SceneManager:

var numScenes = SceneManager.sceneCount; 
List<string> sceneNames = new List<string>(numScenes); 

for (int i=0; i < numScenes; ++i) 
{ 
    sceneNames.Add(StageManager.GetSceneAt(i).name); 
} 

Création d'une nouvelle scène à l'exécution :

var newScene = SceneManager.CreateScene(string sceneName); 

Ajout de nouvelles scènes sur le chemin de la construction lors de l'exécution:

Je suis assez certain que ce n'est pas possible, ni recommandé. Si vous voulez la fonctionnalité d'un éditeur de niveau dans votre jeu, pensez à écrire votre propre méthode de sérialisation d'une scène afin qu'elle puisse être désérialisée en une scène vide lors de l'exécution.


Voir aussi:

+0

Merci beaucoup. Pouvez-vous expliquer le dernier point un peu plus cleaer? Je veux avoir un éditeur de niveau plus tard ou juste un dossier pour mettre des cartes (scènes?) Et le jeu doit l'usw, mais les scènes doivent être dans le buildpath autant que je sache. – Mattizin

+0

Une autre question ici: Vous utilisez GetSceneAt (i) .name Voulez-vous dire SceneManager.GetSceneAt (i) .name? Si oui. il n'a qu'une scène, ma scène principale pas les autres. L'indice supérieur 1 est hors limites. Mais les scènes sont ajoutées au chemin de compilation? Pourquoi ne sont-ils pas ajoutés au scénemanager? – Mattizin

+0

Ouais l'une des plus grandes faiblesses d'Unity est l'édition de niveau .... –

0

Comme expliqué here on the Unity forums, SceneManager. GetSceneAt fonctionne uniquement avec actuellement active scènes.

Pour l'instant, vous devez utiliser les solutions de rechange pour obtenir toutes les scènes dans votre construction pendant l'exécution, en utilisant EditorBuildSettings.scenes. Vous avez raison, ceci n'est disponible que pendant la modification, mais vous pouvez simplement vous assurer de les mettre en cache dans un élément ou un composant d'exécution avant la création. Notez également que le documentation example for EditorBuildSettings.scenes vous donne en fait un script assez puissant pour saisir toutes les scènes, y compris celles qui n'ont pas été ajoutées aux paramètres de construction (et les ajoute même aux paramètres de construction, en cliquant sur un seul bouton)!Vous pouvez simplement utiliser cela pour enregistrer tous les chemins de scène vers un composant ou ScriptableObject qui sera alors disponible pendant l'exécution.