Power up not working
So I currently have a working 'Speed' power up that multiplies the speed of the player by 2. I'm trying to make a power up now that increases the score you get for picking up the GameObject 'Gem' by 2. it should increase to 20 points per gem from 10.
Currently, the power up is spawning randomly around the map within 10-20 seconds, so as intended, but the score you get for collecting the power up has not gone up to 20.
PlayerMovement Code:
void OnTriggerEnter2D(Collider2D other)
{
if (other.gameObject.CompareTag ("shuriken"))
{
if (livess <= 1)
{
Destroy (Player);
livess = livess - 1;
Debug.LogError (livess);
}
else
{
livess = livess - 1;
Debug.LogError (livess);
return;
}
}
if (other.gameObject.CompareTag ("speedPowerUp"))
{
StartCoroutine (WaitTimeSpeed ());
other.gameObject.SetActive (false);
}
if (other.gameObject.CompareTag ("MultiPowerUp"))
{
StartCoroutine (WaitTimeMulti ());
other.gameObject.SetActive (false);
}
IEnumerator WaitTimeMulti()
{
addScore = 20;
yield return new WaitForSeconds (5);
addScore = 10;
yield return new WaitForSeconds (Random.Range (10, 20));
SpawnMulti ();
}
void SpawnMulti ()
{
Vector3 RandomSpawn = new Vector3 (Random.Range (-8.87F, 8.87F), Random.Range (-3.87F, 3.97F),1F);
Instantiate (MultiPowerUp, RandomSpawn, Quaternion.identity);
}
Gem script:
public GameObject Gem;
public static int count;
public Text countText;
public int addScores = PlayerMovement.addScore;
void Start()
{
SetCountText ();
}
void SpawnGem()
{
Vector3 RandomSpawn = new Vector3 (Random.Range (-8.87F, 8.87F), Random.Range (-3.87F, 3.97F),1F);
Instantiate (Gem, RandomSpawn, Quaternion.identity);
}
void OnTriggerEnter2D(Collider2D other)
{
if (other.gameObject.CompareTag ("Player"))
{
SpawnGem ();
Destroy (Gem);
count = count + addScores;
SetCountText ();
PlayerPrefs.SetInt("Player Score", count);
}
}
void SetCountText()
{
countText.text = "Count: " + count.ToString ();
}
}
Forgot to mention, I declared addScore in Player$$anonymous$$ovement script as a static int.
You should first use the function destroy as the last statement in the if. And why not dynamically say count += 20; ??
dynamically say count += 20;?
sorry but could you explain a bit? kinda bad at c# / program$$anonymous$$g all together
so in place of your if statement just say if (other.gameObject.CompareTag ("Player")) { SpawnGem (); count = count + 20 (or addscore whatever); SetCountText (); PlayerPrefs.SetInt("Player Score", count); Destroy (Gem); }
Your answer
Follow this Question
Related Questions
How to force IEnumerator methods to be called only with StartCoroutine 2 Answers
Could not load source 'Coroutines.cs': No source available. 1 Answer
Unity Editor can't find IEnumerated 2 Answers
Any Way to Improve These Scripts or Increase Game Performance? 0 Answers
Can Unity throw an error when I start a coroutine without StartCoroutine? 0 Answers