Space shooter tutorial: increase speed of asteroids over time

I am trying to add a timer to my game that increases the speed at the which the asteroids tumble every N seconds by a constant amount. For example, the speed starts at 1, then after 10 seconds increases to 3, then after 20 seconds increases to 6, …

I have the following code in my Mover.cs script:

public class Mover : MonoBehaviour {

private float acceleration = 1f;
public float speed;
public float maxSpeed = 10f;

private Rigidbody rb;

// Use this for initialization
void Start () {
	rb = GetComponent<Rigidbody> ();
	rb.velocity = transform.forward * speed;
	Debug.Log ("asteroid is moving");
}

// Update is called once per frame
void Update () {
	// Add acceleration to speed
	speed += Time.deltaTime * acceleration;
	// Set object velocity
	rb.velocity = transform.forward * speed;
	// Check to make sure speed is under top speed
	if (speed > maxSpeed) {
		speed = maxSpeed;
	}
}

}`

Currently, the asteroids do not appear on the screen, however, so I don’t know if this is working.

Any help is much appreciated. Thanks!

Hi @emmettg - I’m learning Unity myself currently, so this proposed solution might be nonsense, but…

In GameController, expose an ElapsedTime property:

public float ElapsedTime { get; private set; }

Then, update it every frame:

	void Update()
	{
		ElapsedTime += Time.deltaTime;
           ... <the rest of the Update code below>

Then, duplicate the Mover behaviour and call it AsteroidMover and associate that script with the Asteroid prefabs:

public class AsteroidMover : MonoBehaviour
{
    public float Speed;

    void Start()
    {
        GameController gameController = 
            GameObject.FindGameObjectWithTag("GameController").GetComponent<GameController>();

        var elapsed = gameController.ElapsedTime;
        
        int step = (int)elapsed / 10 * 3;

        float speed = Speed * Mathf.Max(1, step);
        
        speed = Mathf.Min(speed, 20);

        GetComponent<Rigidbody>().velocity = Vector3.forward * speed;
    }
}

That seems to work, although as stated, it might not be the best solution…