while(true) coroutine crashing unity

howdy guys… I’m trying to get this coroutine to loop… but I don’t know how (I thought they always looped :x)

using UnityEngine;
using System.Collections;

public class CircleMotion2 : MonoBehaviour
{
    public float PlanetRotateSpeed = -25.0f;
    public float orbitSpeed = 10.0f;
    public Transform startObject;

    void Start()
    {
        Vector3 startObjPos = startObject.transform.position;
        orbitSpeed = Vector3.Distance(transform.position, startObjPos);
        StartCoroutine (Orbit(startObjPos, orbitSpeed));
    }


    void OnTriggerEnter(Collider other)
    {
        orbitSpeed = Vector3.Magnitude (transform.position - other.transform.position);
    }

    IEnumerator Orbit (Vector3 orbitObjPos, float orbitSpd)
    {
        while(true)
        {
        transform.RotateAround (orbitObjPos, Vector3.right, orbitSpeed * Time.deltaTime);
        }
        yield return null;
    }

ignore the other mumbo jumbo

Yup. That’s an infinite loop alright. To fix put a yield statement inside the loop.

IEnumerator Orbit (Vector3 orbitObjPos, float orbitSpd)
    {
        while(true)
        {
            transform.RotateAround (orbitObjPos, Vector3.right, orbitSpeed * Time.deltaTime);
            yield return null;
        }
        yield return null;
    }
1 Like

ah yess you are a god. Thanks a lot buddy, much appreciated!

this solution is giving a warning CS0162: Unreachable code detected :frowning: any options?

Get rid of the last yield return null

2 Likes