- Home /
Increase scroll speed based on Score of my challenges
Hello! I want to create a 2D Jump'n Run platformer which has an endless mode. It has challenges (obstacles) which are spawning out of the camera view. Now I want to increase the scrolling speed of the challenges based on the score the player has reached to make the game more difficult. I already have created a possibility of it, but I think there's a better way to do that. If someone has an idea, please let me know it, thanks.
public class ChallengeController : MonoBehaviour {
public float scrollSpeed = 5.0f;
public GameObject[] challenges;
public float frequency = 0.5f;
float counter = 0.0f;
public Transform challengesSpawnPoint;
bool isGameOver = false;
public float scrollSpeedMultiplier = 1.2f;
public GameController gameController;
public ScoreManager myScoreManager;
// Use this for initialization
void Start ()
{
gameController = GameObject.Find ("GameController").GetComponent<GameController> ();
myScoreManager = GameObject.Find ("ScoreManager").GetComponent<ScoreManager> ();
GenerateRandomChallenge ();
}
// Update is called once per frame
void Update ()
{
if (isGameOver) return;
//Generate Objects
if (counter <= 0.0f) {
GenerateRandomChallenge ();
}
else
{
counter -= Time.deltaTime * frequency;
}
//scrolling
GameObject currentChild;
for (int i = 0; i < transform.childCount; i++)
{
currentChild = transform.GetChild (i).gameObject;
ScrollChallenge (currentChild);
if (currentChild.transform.position.x <= -15.0f)
{
Destroy (currentChild);
}
}
//This is my idea of increasing the scroll speed based on the score
if(myScoreManager.scoreCount >= 50)
scrollSpeed = 6;
if(myScoreManager.scoreCount >= 100)
scrollSpeed = 7;
if(myScoreManager.scoreCount >= 150)
scrollSpeed = 8;
if(myScoreManager.scoreCount >= 200)
scrollSpeed = 9;
//End
}
void ScrollChallenge (GameObject currentChallenge)
{
currentChallenge.transform.position -= Vector3.right * (scrollSpeed * Time.deltaTime);
}
void GenerateRandomChallenge()
{
GameObject newChallenge = Instantiate (challenges [Random.Range (0, challenges.Length)], challengesSpawnPoint.position, Quaternion.identity) as GameObject;
newChallenge.transform.parent = transform;
counter = 1.0f;
}
public void GameOver()
{
isGameOver = true;
transform.GetComponent<GameController> ().GameOver ();
}
}
Answer by krisuman · Nov 02, 2017 at 07:00 PM
First small tip: use FindObjectOfType instead of Find and GetComponent (you are not connected with name of your gameObject)
and for scroollSpeed you could come up with some simple formula. For example: (5 + scoreCount/50) that will give result you currently have. Additionally you can clamp result using Mathf.Clamp(result, minSpeed, ,maxSpeed) so you are sure that game is not getting to fast at some point
Your answer
Follow this Question
Related Questions
Add audio. 1 Answer
Unity 2D - Game Collision Bug Error 0 Answers
Health Bar/Hearts? 2 Answers
2D Character won't jump diagonally 1 Answer
How to create soil or sand?? 1 Answer