- Home /
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!
Answer by SteveDunn · Apr 22, 2018 at 06:38 PM
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...
Your answer
Follow this Question
Related Questions
Space Shooter tutorial shot velocity issues 0 Answers
Destroy GameObject without "killing" Parameters 2 Answers
Space Shooter Shot Issues,Space Shooter Bolt Issues 0 Answers
My sprites wont change? 0 Answers