3
respostas

[Dúvida] Não consigo fazer o Texto ser exibido na tela.

Já finalizei o curso, porém ainda não consegui fazer com que o texto seja exibido no jogo quando o jogodor e morto.

Verifiquei no forum essa questão da versão e ja instalei o Text Mash Pro, porém quando tento substituir a variavel 'public GameObject TextoGameOver', por 'public TMP_Text TextoGameOver;', como foi sugerido no forum, o problema ainda continua.

Se eu mantei do jeito que está o jogo funciona normalmente, exceto a parte do texto, mas quando eu faço a alteração que citei acima o jogo fica com uma mensagem de erro dizendo o seguinte.

'Assets\Scripts\ControlaJogador.cs(12,12): error CS0246: The type or namespace name 'TMP_Text' could not be found (are you missing a using directive or an assembly reference?)'

Podem me ajuda nesta questão?

3 respostas

Oi, Gustavo, tudo bem?

Não esquece de no começo do script colocar using TMPro; pra conseguir acessar esses novos tipos.

Se não der certo to por aqui, bons estudos.

Oi Onde eu coloco esse "using TMPro;" ? Meu codigo ficou assim em baixo

using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;

public class ControlaInimigo : MonoBehaviour
{
    public GameObject Jogador;
    public float Velocidade = 5;
    public TMP_Text TextoGameOver;


    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()

    {
    }

    void FixedUpdate()
    {
        float distancia = Vector3.Distance(transform.position, Jogador.transform.position);
        Vector3 direcao = Jogador.transform.position - transform.position;
        Quaternion novaRotacao = Quaternion.LookRotation(direcao);
        GetComponent<Rigidbody>().MoveRotation(novaRotacao);

        if (distancia > 2.5) {

                GetComponent<Rigidbody>().MovePosition
                (GetComponent<Rigidbody>().position +
                direcao.normalized * Velocidade * Time.deltaTime);

            GetComponent<Animator>().SetBool("Atacando", false);
        }
        else
        {
            GetComponent<Animator>().SetBool("Atacando", true);
        }
    }

    void AtacaJogador ()
    {
        Time.timeScale = 0;
        object value = Jogador.GetComponent<ControladorJogador>().TextoGameOver.SetActive()
    }
}

E mesmo assim, não está indo o texto. Não consigo nem pre-visualizar que esta dando o erro

Gravidade Código Descrição Projeto Arquivo Linha Estado de Supressão Erro CS1061 ‘TMP_Text’ não contém uma definição para "SetActive" e não foi possível encontrar nenhum método de extensão "SetActive" que aceite um primeiro argumento do tipo ‘TMP_Text’ (você está se esquecendo de usar uma diretiva ou uma referência de assembly?) Assembly-CSharp K:\User\UNITY\alura - Jogo de ZUMBI\apocalipse-zumbi-alura\Assets\Scripts\ControlaInimigo.cs 50 Ativo

Troca essa linha:

object value = Jogador.GetComponent<ControladorJogador>().TextoGameOver.SetActive()

pelo que está no curso. Porque no script do inimigo você não precisa acessar o texto nesse curso, somente na parte dois. Então ao invés de usar public TMP_Text TextoGameOver; use public GameObject TextoGameOver; normalmente no jogador. Lá a mesma coisa use GameObject, o script de controla inimigo não precisa de uma variável do texto porque fazemos o acesso pelo jogador.

Bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software