I’m working on a project that involves a truck moving back and forth every now and then. The back and forth movements are managed in a couple of coroutines. Every time I play the game, right after the second coroutine (backwards movement) finishes, Unity crashes. I’ve tried making sure to stop all coroutines after each coroutine in case they’re taking up too much CPU. Here is the coroutines involved (the backwards movement is the one that crashes):
IEnumerator MoveTruckForward(float time)
{
float elapsedTime = 0;
//-starting and ending positions for truck
Vector3 startingPos = new Vector3(0, 0, 0);
Vector3 endingPos = new Vector3 (4, 0, 0);
//-starting rotations for wheels
Vector3 back_angles = wheel_back.transform.rotation.eulerAngles;
Vector3 front_angles = wheel_front.transform.rotation.eulerAngles;
while (elapsedTime < 4)
{
//-rotates back wheel while truck is moving
back_angles.z = Mathf.Lerp(back_angles.z, -1440, (elapsedTime/time) / 30);
wheel_back.transform.eulerAngles = back_angles;
//-rotates front wheel while truck is moving
front_angles.z = Mathf.Lerp(front_angles.z, -1440, (elapsedTime/time) / 30);
wheel_front.transform.eulerAngles = front_angles;
//-moves truck to ending pos
truck.transform.position = Vector3.Lerp(startingPos, endingPos, (elapsedTime / time));
elapsedTime += Time.deltaTime;
yield return null;
}
}
IEnumerator MoveTruckBackward(float time)
{
float elapsedTime = 0;
//-starting and ending positions for truck
Vector3 startingPos = new Vector3 (4, 0, 0);
Vector3 endingPos = new Vector3 (0, 0, 0);
//-starting rotations for wheels
Vector3 back_angles = wheel_back.transform.rotation.eulerAngles;
Vector3 front_angles = wheel_front.transform.rotation.eulerAngles;
while (elapsedTime < 4)
{
//-rotates back wheel while truck is moving
back_angles.z = Mathf.Lerp(back_angles.z, 1440, (elapsedTime/time) / 40);
wheel_back.transform.eulerAngles = back_angles;
//-rotates front wheel while truck is moving
front_angles.z = Mathf.Lerp(front_angles.z, 1440, (elapsedTime/time) / 40);
wheel_front.transform.eulerAngles = front_angles;
//-moves truck to ending pos
truck.transform.position = Vector3.Lerp(startingPos, endingPos, (elapsedTime / time));
elapsedTime += Time.deltaTime;
yield return null;
}
}
Again, it only happens after the first instance of the truck moving back, regardless of how many coroutines have happened beforehand. Any help would be greatly appreciated.