UI duplicando numeração usando SceneManager.LoadScene
3 participantes
Página 1 de 1
UI duplicando numeração usando SceneManager.LoadScene
Olá, estou criando um game de terror cujo o objetivo é coletar 10 itens pelo mapa, e esse número é mostrado na UI do jogo, porém, ao morrer e restartar a cena, ou voltar ao menu e iniciar o jogo novamente, a numeração está duplicando, mostrando que há 20 itens, quando na verdade só há 10. Já tentei de tudo pra arrumar mas sempre dá no mesmo, se alguém puder me ajudar ficarei grato. Seguem os 2 scripts que estou utilizando:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class CountObjects : MonoBehaviour
{
public string nomeDaCena;
public GameObject objToDestroy;
GameObject objUI;
// Use this for initialization
void Start()
{
objUI = GameObject.Find("ObjectNum");
}
// Update is called once per frame
void Update()
{
objUI.GetComponent<Text>().text = ObjectsToCollect.objects.ToString();
if (ObjectsToCollect.objects == 0)
{
SceneManager.LoadScene(nomeDaCena);
//Destroy(objToDestroy);
}
}
}
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectsToCollect : MonoBehaviour
{
public static int objects = 0;
// Use this for initialization
void Awake()
{
objects++;
}
// Update is called once per frame
void OnTriggerEnter(Collider plyr)
{
if (plyr.gameObject.tag == "Player")
objects--;
gameObject.SetActive(false);
}
}
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class ChangeScene : MonoBehaviour
{
public string nomeDaCena;
// Start is called before the first frame update
public void ChangeS()
{
Time.timeScale = 1f;
SceneManager.LoadScene(nomeDaCena);
}
// Update is called once per frame
public void Sair()
{
Application.Quit();
}
public void Restart()
{
Time.timeScale = 1f;
SceneManager.LoadScene(nomeDaCena);
}
}
AmazingDeliciano- Membro
- PONTOS : 1773
REPUTAÇÃO : 3
Respeito as regras :
Re: UI duplicando numeração usando SceneManager.LoadScene
Qual o motivo de adicionar +1 no Awake? '='
[list=linenums]
[*]using System.Collections;
[*]using System.Collections.Generic;
[*]using UnityEngine;
[*]public class ObjectsToCollect : MonoBehaviour
[*]{
[*]
[*] public static int objects = 0;
[*]
[*] // Use this for initialization
[*] void Awake()
[*] {
[*] objects++;
[*]
[*] }
[*] // Update is called once per frame
[*] void OnTriggerEnter(Collider plyr)
[*] {
[*] if (plyr.gameObject.tag == "Player")
[*] objects--;
[*] gameObject.SetActive(false);
[*] }
[*]}
[/list]
[list=linenums]
[*]using System.Collections;
[*]using System.Collections.Generic;
[*]using UnityEngine;
[*]public class ObjectsToCollect : MonoBehaviour
[*]{
[*]
[*] public static int objects = 0;
[*]
[*] // Use this for initialization
[*] void Awake()
[*] {
[*] objects++;
[*]
[*] }
[*] // Update is called once per frame
[*] void OnTriggerEnter(Collider plyr)
[*] {
[*] if (plyr.gameObject.tag == "Player")
[*] objects--;
[*] gameObject.SetActive(false);
[*] }
[*]}
[/list]
Micco- MembroAvançado
- PONTOS : 1791
REPUTAÇÃO : 17
Áreas de atuação : C#, GDScript, HTML e CSS.
Respeito as regras :
Re: UI duplicando numeração usando SceneManager.LoadScene
umas das coisas que sempre percebi é que as variaveis estáticas não mudam o valor após sair da cena ou dar um reload na cena, elas parecem que não iniciam novamente junto com a cena sempre fincando com o valor anterior, bom era o que acontecia comigo, outra coisa é como o amigo ai falo, não faz sentido acrescentar nada no Awake().
E por último, no script CountObjects se vc tiver usando um objeto do tipo Text, vc não precisaria declarar uma variavel GameObject pra usar o text, vc simplesmente pode declarar uma variavel do tipo Text normal até pq foi importado using UnityEngine.UI.
Creio eu que não tiver nada interligado aos dois primeiros script ao invés de usar dois scripts vc poderia fazer com 1 só tirando a variavel estática e deixando o script no player.
Mas umas das coisas que resolvia com variveis estáticas do tipo INT era passar ZERO sempre na void Start() e isso resolvia pra mim, não era o mais ideal, mas resolvia. Mas uma dica, para ficar mais fácil para ti, vc poderia escrever um único script e ficaria mais fácil de mudar algo e com isso tiraria a variavel estatica
E por último, no script CountObjects se vc tiver usando um objeto do tipo Text, vc não precisaria declarar uma variavel GameObject pra usar o text, vc simplesmente pode declarar uma variavel do tipo Text normal até pq foi importado using UnityEngine.UI.
Creio eu que não tiver nada interligado aos dois primeiros script ao invés de usar dois scripts vc poderia fazer com 1 só tirando a variavel estática e deixando o script no player.
Mas umas das coisas que resolvia com variveis estáticas do tipo INT era passar ZERO sempre na void Start() e isso resolvia pra mim, não era o mais ideal, mas resolvia. Mas uma dica, para ficar mais fácil para ti, vc poderia escrever um único script e ficaria mais fácil de mudar algo e com isso tiraria a variavel estatica
poyser- Avançado
- PONTOS : 3034
REPUTAÇÃO : 46
Idade : 26
Áreas de atuação : https://play.google.com/store/apps/dev?id=6312026995180986052
Respeito as regras :
Re: UI duplicando numeração usando SceneManager.LoadScene
Eu encontrei esse script em um tutorial há um tempo atrás, no caso o ''adicionar +1'' contabiliza num sistema inverso as páginas do slender, ao invés de aumentar ao coletar, ele subtrai, por isso ele adiciona no awake.Micco escreveu:Qual o motivo de adicionar +1 no Awake? '='
[list=linenums]
[*]using System.Collections;
[*]using System.Collections.Generic;
[*]using UnityEngine;
[*]public class ObjectsToCollect : MonoBehaviour
[*]{
[*]
[*] public static int objects = 0;
[*]
[*] // Use this for initialization
[*] void Awake()
[*] {
[*] objects++;
[*]
[*] }
[*] // Update is called once per frame
[*] void OnTriggerEnter(Collider plyr)
[*] {
[*] if (plyr.gameObject.tag == "Player")
[*] objects--;
[*] gameObject.SetActive(false);
[*] }
[*]}
[/list]
AmazingDeliciano- Membro
- PONTOS : 1773
REPUTAÇÃO : 3
Respeito as regras :
Re: UI duplicando numeração usando SceneManager.LoadScene
o problema, é q se eu tirar o objects++ do awake, o script inteiro entra em colapso, mas no caso q tu falou ali, eu teria q colocar algo tipo ''objects = 0;'' ?poyser escreveu:umas das coisas que sempre percebi é que as variaveis estáticas não mudam o valor após sair da cena ou dar um reload na cena, elas parecem que não iniciam novamente junto com a cena sempre fincando com o valor anterior, bom era o que acontecia comigo, outra coisa é como o amigo ai falo, não faz sentido acrescentar nada no Awake().
E por último, no script CountObjects se vc tiver usando um objeto do tipo Text, vc não precisaria declarar uma variavel GameObject pra usar o text, vc simplesmente pode declarar uma variavel do tipo Text normal até pq foi importado using UnityEngine.UI.
Creio eu que não tiver nada interligado aos dois primeiros script ao invés de usar dois scripts vc poderia fazer com 1 só tirando a variavel estática e deixando o script no player.
Mas umas das coisas que resolvia com variveis estáticas do tipo INT era passar ZERO sempre na void Start() e isso resolvia pra mim, não era o mais ideal, mas resolvia. Mas uma dica, para ficar mais fácil para ti, vc poderia escrever um único script e ficaria mais fácil de mudar algo e com isso tiraria a variavel estatica
AmazingDeliciano- Membro
- PONTOS : 1773
REPUTAÇÃO : 3
Respeito as regras :
Re: UI duplicando numeração usando SceneManager.LoadScene
sim só colocar assim
void Start(){
objects = 0;
}
void Start(){
objects = 0;
}
poyser- Avançado
- PONTOS : 3034
REPUTAÇÃO : 46
Idade : 26
Áreas de atuação : https://play.google.com/store/apps/dev?id=6312026995180986052
Respeito as regras :
Re: UI duplicando numeração usando SceneManager.LoadScene
blz, vou testar aqui.poyser escreveu:sim só colocar assim
void Start(){
objects = 0;
}
AmazingDeliciano- Membro
- PONTOS : 1773
REPUTAÇÃO : 3
Respeito as regras :
Re: UI duplicando numeração usando SceneManager.LoadScene
Testei aqui e funcionou perfeitamente, mantive o static int, e coloquei objects = 10;, e o valor não mudou mais após o restart, valeu! O script ficou assim:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectsToCollect : MonoBehaviour
{
public static int objects;
// Use this for initialization
void Start()
{
objects = 10;
}
// Update is called once per frame
void OnTriggerEnter(Collider plyr)
{
if (plyr.gameObject.tag == "Player")
objects--;
gameObject.SetActive(false);
}
}
AmazingDeliciano- Membro
- PONTOS : 1773
REPUTAÇÃO : 3
Respeito as regras :
Re: UI duplicando numeração usando SceneManager.LoadScene
Segue um gameplay do jogo finalizado, caso tenha interesse em baixar para dar uma jogada, os links estão na descrição.
AmazingDeliciano- Membro
- PONTOS : 1773
REPUTAÇÃO : 3
Respeito as regras :
Tópicos semelhantes
» Script SceneManager.GetActiveScene
» Mudar um .TXT usando um site
» LoadScene De um Jeito Diferente [duvida]
» problema com Movimento usando Rigidbody
» (Ajuda) SceneManager
» Mudar um .TXT usando um site
» LoadScene De um Jeito Diferente [duvida]
» problema com Movimento usando Rigidbody
» (Ajuda) SceneManager
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos