- Home /
Displaying score from a scene to another
Hi, I would want to display the score when it's on the Game Over Scene. Here's how I display the score while playing :
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SnakeBody : MonoBehaviour {
private int myOrder;
private Transform head;
private Vector3 movementVelocity;
[Range(0.0f,1.0f)]
public float overTime = 0.5f;
public float score;
void Start(){
head = GameObject.FindGameObjectWithTag("Player").gameObject.transform;
for (int i = 0; i < head.GetComponent<SnakeMovement>().bodyParts.Count; i++) {
if(gameObject==head.GetComponent<SnakeMovement>().bodyParts[i].gameObject){
myOrder=i;
Scoring(i);
}
}
}
void Scoring(int i){
score = 1;
score = score + i;
GameObject.Find("Score").GetComponent<GUIText>().text = "" + score;
}
void FixedUpdate(){
if (myOrder == 0) {
transform.position = Vector3.SmoothDamp (transform.position, head.position, ref movementVelocity, overTime);
transform.LookAt (head.transform.position);
} else {
transform.position = Vector3.SmoothDamp (transform.position, head.GetComponent<SnakeMovement> ().bodyParts [myOrder - 1].position, ref movementVelocity, overTime);
transform.LookAt (head.transform.position);
}
}
}
And my Game Over Script :
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ScoreGameOver : SnakeBody {
void DisplayScore(){
GameObject.Find ("Score").GetComponent<GUIText> ().text = "Score : " + score;
}
}
Comment
Answer by aguskos · Jun 12, 2017 at 07:04 PM
Not really sure what are you asking but you can save varibles between scene using PlayerPrefs
In you game scene do sometihg like PlayerPrefs.SetInt("Player Score", 10); In score scene PlayerPrefs.GetInt("Player Score");
Answer by Raimi · Jun 12, 2017 at 07:21 PM
You should use a singleton to manage stuff like score, game state etc. then you can set and access the score from anywhere.
public float score;
public int level;
public float level speed;
public static ClassName instance = null;
void Awake()
{
//Must be active in scene
//This is a quick and dirty singleton. Please research Singleton design pattern
instance = this;
}
Now you can do this from any script...
void Start()
{
ClassName c = ClassName.instance;
c.score += 100;
c.level += 1;
c.levelSpeed = 20;
}
or
void OnTriggerEnter2D(collider2D col)
{
if(col.tag == "SomeTag")
{
ClassName.instance.score += 100;
}
}
or
void Start()
{
PlayerPrefs.SetFloat("Player Score", ClassName.instance.score);
}