- Home /
Question by
importguru88 · Jun 23, 2016 at 03:39 PM ·
c#textcanvasscoretimer-script
How do I carry over canvas ui text to the next scene
I am having a problem carrying over the text in unity. I don't know what is going on. I don't have any errors . I have a score script and a timer script . I am access the timer , and score script from a test . I also have a picture to show what is going on when I press play. Here are my scripts :
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class ScoreManagerScript : MonoBehaviour
{
public static int score;
public GameObject RootCanvas;
private Text text;
void Awake()
{
text = GetComponent <Text> ();
score = 0;
DontDestroyOnLoad(RootCanvas.transform.root);
}
void Update()
{
text.text = "Score: " + score;
Debug.Log("Score: " + score);
}
}
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class Test : MonoBehaviour {
private MyClockScript myClock;
public GameObject Score;
public GameObject Text;
private ScoreManagerScript scoremanager;
void Awake () {
myClock = GetComponent<MyClockScript>();
scoremanager = GetComponent<ScoreManagerScript>();
Score = GameObject.Find("Tip");
}
void Update ()
{
if (myClock.m_leftTime <= 0 && 0 <= ScoreManagerScript.score)
{
SceneManager.LoadScene("new");
}
}
}
dontdestroyonload.png
(188.9 kB)
Comment
Best Answer
Answer by TheNoobieWaffle · Jun 23, 2016 at 03:48 PM
https://docs.unity3d.com/ScriptReference/Object.DontDestroyOnLoad.html
Is only the canvas not getting removed? You may need to obtain the children of the transform and set all of them to not destroy on load.
Answer by importguru88 · Jun 23, 2016 at 04:00 PM
How I obtain the children ? I have added the code and nothing still happen.
sing UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class MyClockScript : MonoBehaviour
{
public int Minutes = 0;
public int Seconds = 0;
private Text m_text;
public float m_leftTime;
public void Awake()
{
m_text = GetComponent<Text>();
m_leftTime = GetInitialTime();
DontDestroyOnLoad(transform.gameObject);
}
public void Update()
{
if (m_leftTime > 0f)
{
// Update countdown clock
m_leftTime -= Time.deltaTime;
Minutes = GetLeftMinutes();
Seconds = GetLeftSeconds();
// Show current clock
if (m_leftTime > 0f)
{
m_text.text = "Time : " + Minutes + ":" + Seconds.ToString("00");
}
else
{
// The countdown clock has finished
m_text.text = "Time : 0:00";
}
}
}
private float GetInitialTime()
{
return Minutes * 60f + Seconds;
}
private int GetLeftMinutes()
{
return Mathf.FloorToInt(m_leftTime / 60f);
}
private int GetLeftSeconds()
{
return Mathf.FloorToInt(m_leftTime % 60f);
}
}