2016-07-31 3 views
0

J'utilise StartCoroutines dans une classe différente, le problème est que j'ai besoin de la classe son appel pour être dynamique. LevelSelected est une chaîne, le levelnumber est le niveau (int), et je le veux pour ramasser les fonctions d'énumérateur de cette classeUnity C# StartCoroutines - est-il possible de mettre une chaîne dans le StartCoroutine?

Le numéro de niveau est déterminé par le niveau choisi par le joueur dans le menu de démarrage.

Problème Je vais avoir ... si je génère ce dont j'ai besoin dans la chaîne.

`StartCoroutine (LevelSelected);` 

erreurs Il en disant - Coroutine. Camera.GetComponent() Pattern2() n'a pas pu être commencé! Mais quand je code dur cette valeur, ça marche bien ...

Y a-t-il un moyen de contourner cela?

Merci, Craig

+0

lecture entre les lignes, avez-vous un comportement différent pour chaque niveau? 'Level1',' Level2', et ainsi de suite? Ce n'est pas une bonne idée. Notez également sur les docs ['StartCoroutine' (https://docs.unity3d.com/ScriptReference/MonoBehaviour.StartCoroutine.html) que vous ne pouvez transmettre qu'un nom de méthode, pas une expression C# (ce que vous essayez de faire passer). – 31eee384

+0

Ouais je comprends cela, je me demande juste s'il existe une solution de contournement - je peux littéralement coder en dur dans ce que dit la chaîne et ça marche .. Il y a le niveau 1, le niveau 2 etc mais les niveaux sont tous les mêmes. – Craig

+0

Avez-vous essayé ceci? 'LevelSelected =" Camera.GetComponent (). Pattern1() ";' – josehzz

Répondre

0

Je suis assez sûr que vous effectuez une action illégale là GetComponent <> ne peut utiliser des références directes aux noms de classe. Au lieu d'essayer de jeter la valeur dans la chaîne, faire quelque chose comme ceci:

var levelScript = Camera.GetComponent<Level>(); 
StartCoroutine(levelScript.Pattern(levelnumber)); 

Et dans votre fonction de modèle changer à quelque chose comme ça

IEnumerator Pattern(int levelnumber) 
{ 

} 
+0

hey man, LevelSelected = "Camera.GetComponent () .Pattern2() "; était l'erreur, désolé copié à partir du journal des erreurs .. problème est la chaîne que j'utilise ne peut pas être appelé dans le StartCoroutine parce que son autre chaîne ... Je peux le faire fonctionner autrement me demandais si je peux utiliser une chaîne comme la valeur à mettre dans un Coroutine ... (au lieu du nom Ienumeration) – Craig

+0

Je ne suis pas sûr de ce que vous voulez dire, si vous voulez donner une chaîne au démarrage de la routine, utilisez ceci: IEnumerator Pattern (string levelnumber) – spatbord

+0

Je viens de réaliser que vous essayez d'appeler plusieurs fonctions à partir d'une chaîne .. Non, vous ne pouvez pas faire cela. – spatbord