- Home /
[ Coroutine: Move Next ] CPU usage
I'm trying to optimize my game viewing all CPU usage in the Profiler (with Deep Profile) and I discovered an odd thing: if I don't move my character FPS are greater than 100, but if I move it the FPS drop down to almost 70, and furthermore if I stop to move my character the FPS encrease to 100 again. I watched Profiler during FPS drop and I noticed this:
As you see, Update.ScriptRunDelayedDynamicFrameRate is the cause of this FPS drop (it appears only when I move my character), and I know that it refers to Coroutines. I have highlighted the AI_GenericMonster.LoadGlob() [Coroutine:MoveNext] record because I think (but I don't know) that somehow that script ruin the FPS stability. Here the part of script:
IEnumerator LoadGlob ()
{
while (glob == null)
{
glob = GameObject.Find ("GlobalParameters");
}
while (globScript == null)
{
globScript = glob.GetComponent <Global_Entities> ();
}
while (startScene == null)
{
startScene = GameObject.Find ("Start Scene");
}
while (startScript == null)
{
startScript = startScene.GetComponent<Start_Scene> ();
}
if (enemyState == "Enabled") {
SetEnable ();
} else if (enemyState == "Disabled") {
SetDisable ();
}
while (startScript.readyToStart == false) {
yield return null;
}
loaded = true;
while (destPoints == null) {
while (destPoints.Length == 0) {
yield return null;
}
}
destPoint = Random.Range (0, destPoints.Length);
GotoNextPoint (destPoints);
while (destPointsAlert == null) {
while (destPointsAlert.Length == 0) {
yield return null;
}
}
destPointAlert = Random.Range (0, destPointsAlert.Length);
GotoNextPointAlert (destPointsAlert);
StopCoroutine (loadRoutine);
}
This IEnumerator is called only on Start() so I don't understand why there is so much CPU usage for this. Please help me because I can't solve this alone.
Furthermore, I noticed that more monster there are in the scene (every monster has one of these scripts) and higher is the CPU usage of AI_Generic$$anonymous$$onster.LoadGlob() [Coroutine:$$anonymous$$oveNext] record, but that coroutine is called ONLY on Start(), and seems there are not garbage (only yield return null). Please help me!
Your answer
Follow this Question
Related Questions
What am I doing wrong with IEnumerator? 1 Answer
fps calculation with while loop in coroutine 2 Answers
Coroutoutine doesnt work properly. 3 Answers