C# 已解决-协同程序在WebGL中的行为异常
我在我的WebGL游戏中遇到了协同程序的奇怪行为。我希望在循环中生成灯光,在迭代之间具有不同的延迟。最好的方法是制作一个协同程序,我就是这么做的,它在编辑器中运行得非常完美。该问题仅出现在web浏览器中-看起来协同程序完全不同步,例如一个灯光显示时间过长,然后消失,两个灯光同时显示,即使它们应该按顺序生成。在这一点上,我完全没有想法,因为据说协同程序正在WebGL中工作。此外,浏览器控制台不会显示任何错误,并且时间间隔打印正确,但生成无法正常工作 我尝试过的事情:C# 已解决-协同程序在WebGL中的行为异常,c#,unity3d,webgl,coroutine,C#,Unity3d,Webgl,Coroutine,我在我的WebGL游戏中遇到了协同程序的奇怪行为。我希望在循环中生成灯光,在迭代之间具有不同的延迟。最好的方法是制作一个协同程序,我就是这么做的,它在编辑器中运行得非常完美。该问题仅出现在web浏览器中-看起来协同程序完全不同步,例如一个灯光显示时间过长,然后消失,两个灯光同时显示,即使它们应该按顺序生成。在这一点上,我完全没有想法,因为据说协同程序正在WebGL中工作。此外,浏览器控制台不会显示任何错误,并且时间间隔打印正确,但生成无法正常工作 我尝试过的事情: 设置协同程序的恒定时间 不移
- 设置协同程序的恒定时间
- 不移除使用过的对象(移除对象时最常出现的描述的奇怪现象,但这似乎只是时间关系的问题-一盏灯亮,另一盏灯灭)
- 使用WaitForSeconds和WaitForSecondRealTime
- 设置不同的targetFrameRate
- 允许WebGL应用程序使用更多资源
我可以提供一些视频证据,以便将问题可视化。
提前感谢您的帮助 代码 在GameManager中:
public void startClick()
{
inGame = true;
inGameUI.gameObject.SetActive(true);
spawnLights.Invoke("StartGame", 1);
}
在灯光下:
IEnumerator DisplayCoroutine()
{
foreach (var letter in sequence)
{
yield return new WaitForSecondsRealtime(intervalTime);
letterCounter++;
lightComponent = lightPrefab.GetComponent<Light>();
lightComponent.color = coloursDict[letter];
Instantiate(lightPrefab, GenerateSpawnPosition(), lightPrefab.transform.rotation);
Debug.Log("Curent interval: " + intervalTime);
intervalTime = calculateInterval(letterCounter);
}
gameManager.Invoke("ShowGameOver", 4);
}
private float calculateInterval(int nucNumber)
{
return (Mathf.Pow(difficultyFactor, nucNumber)) * maxInterval + minInterval;
}
public void StartGame()
{
GenerateSequence(gameManager.sequenceLength);
StartCoroutine(DisplayCoroutine());
}
IEnumerator DisplayCoroutine()
{
foreach(var字母顺序)
{
返回新的WaitForSecondRealTime(间隔时间);
字母计数器++;
lightComponent=lightPrefable.GetComponent();
lightComponent.color=colorsdict[字母];
实例化(lightprefable,GenerateSpawnPosition(),lightprefable.transform.rotation);
Log(“当前间隔:+间隔时间”);
间隔时间=计算间隔(字母计数器);
}
gameManager.Invoke(“ShowGameOver”,4);
}
专用浮点计算区间(整数编号)
{
返回值(Mathf.Pow(困难系数,数值))*maxInterval+minInterval;
}
公共无效StartName()
{
GenerateSequence(gameManager.sequenceLength);
start例程(DisplayCoroutine());
}
考虑使用固定的时间间隔来缩小问题范围。我们在WebGL中使用协同程序,与编辑器或其他平台相比没有任何奇怪的问题。@RetiredInja我以前做过,但现在重复了。虽然它可能会稍微平滑一些,但仍然不能正常工作-灯光会消失一小段时间,然后在另一个灯光出现或消失时再次出现。如果让人困惑的话,我可以提供一些视频来形象化这一点。更改Unity的版本有所帮助-从2018.4.32f1到2019.4.9f1