2016-07-31 80 views
0

我在不同的类中使用StartCoroutines,问题是我需要它的调用动态类。 LevelSelected = "Camera.GetComponent<Level"+levelnumber+">().Pattern1()";Unity C#StartCoroutines - 是否可以把一个字符串放入StartCoroutine

LevelSelected是一个字符串,levelnumber是level(int),我希望它从该类中获取枚举器函数。等级号码取决于玩家在开始菜单上选择的等级。

问题我现在是...如果我输出我需要的字符串。

`StartCoroutine (LevelSelected);` 

它出错了 - Coroutine'Camera.GetComponent()。Pattern2()'无法启动!但是,当我硬编码这个值,它工作正常...

有没有办法解决这个问题?

谢谢, 克雷格

+0

字里行间,你有没有每个级别有不同的行为? 'Level1','Level2'等等?这不是一个好主意。另外,请注意['StartCoroutine'文档](https://docs.unity3d.com/ScriptReference/MonoBehaviour.StartCoroutine.html),您只能传递方法名称,而不是C#表达式(您正在尝试的是通过)。 – 31eee384

+0

是的,我明白了,我只是想知道是否一个解决方法 - 我可以从字面上只是硬编码说什么字符串说,它的工作原理.. 有1级,2级等,但水平都一样。 – Craig

+0

你试过这个吗? 'LevelSelected =“Camera.GetComponent ()。Pattern1()”;' – josehzz

回答

0

我相当肯定你在那里 执行非法操作GetComponent <>只能使用到的类名直接引用。 不要试图在字符串中的值扔,做这样的事情:

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

而在你的图形函数将其更改为这样的事情

IEnumerator Pattern(int levelnumber) 
{ 

} 
+0

hey man,LevelSelected =“Camera.GetComponent ( ).Pattern2()“; 是错误,抱歉从错误日志复制..问题是我使用的字符串不能在StartCoroutine调用,因为它的另一个字符串... 我可以得到它的工作,否则只是想知道如果我可以使用一个字符串作为值放入协程...(而不是Ienumeration名称) – Craig

+0

我不确定你的意思,如果你想在开始例程时给一个字符串使用这个:IEnumerator Pattern(string levelnumber) – spatbord

+0

我刚刚意识到你正试图从一个字符串调用多个函数..不,你不能这样做。 – spatbord