I’m new to the concept of coroutines. Within one of my scripts I check to see if a variety of different objects are close enough to the camera to enable them. If they are not, they remain disabled. The script checks the distances every X seconds.
I was noticing within Profiler that the script was taking about 2.5ms-3.5ms to process and would like to cut it down, so I modified my code (below).
Can anyone tell me if doing it this way is a good idea or not? I guess I’m specifically referring to the way the conditional statements “yield” within CheckShowOrDontShow(). From what I understand, yield will basically exit the coroutine, then next frame return to where it left off. The result is that the Profiler shows it as taking 0.15ms-0.3ms now. Great! Just not sure if I’m missing something or causing problems elsewhere.
function Start () {
cachedVisibleDistance = visibleDistance;
player = GameObject.Find("Player/Ship/Ship");
for (var child : Transform in transform) {
// Lets us specify which child to enable/disable based on distance.
child.transform.gameObject.SetActiveRecursively(false);
theObject.Push(child.gameObject);
theLocation.Push(child.position);
theStatus.Push(false);
}
arrLength = theObject.length;
}
function LateUpdate () {
if(tempTime <= Time.time) {
// Cache the player's position so we don't have to access it every loop in CheckShowOrDontShow(). Saves CPU (Profiler)
cachedPlayerPosition = player.transform.position;
CheckShowOrDontShow();
tempTime = distanceCheck + Time.time;
}
}
function CheckShowOrDontShow() {
// Get the distance to all the objects which enable or disable based on distance
for (i=0;i<arrLength;i++) {
if (player && theObject) {
if(theStatus *== false) {*
_ if(Vector3.Distance(cachedPlayerPosition, theLocation*) <= visibleDistance) {_
_ / Then we tell it to enable.
* Alternatively, we could just enable and disable materials, but I*
feel like completely disabling the objects may save resources. /
theObject.SetActiveRecursively(true);
theStatus = true;
}
yield; // Check Profiler to see if this helps with processing time*
* } else {
// We should also disable currently enabled objects if they’re farther than visibleDistance*
if (Vector3.Distance(cachedPlayerPosition, theLocation*) > visibleDistance) {
theObject.SetActiveRecursively(false);
theStatus = false;
}
yield; // Check Profiler to see if this helps with processing time*
* }
}
}
}*_