Solucionado (ver solução)
Solucionado
(ver solução)
12
respostas

pontuação

Gostaria de criar uma pontução no meu jogo, fazendo com que ela seja equivalente ao numero de zumbis mortos pelo jogador, e aparecendo junto com o texto do game over. como poderia fazer isso?

12 respostas
solução!

Oi, Thais, tudo bem?

Vou dar um pequeno resumo de como fazer.

No script do jogador você pode criar uma variável como public int Pontuacao;.

Agora no script do prefab da Bala você pode adicionar uma referencia ao script do jogador.

// lembre-se de preencher ela arrastando no inspector.
public ControlaPersonagem jogador;

Agora na colisão da bala você adiciona 1 na variável pontuação

jogador.Pontuacao++;

Quando isso estiver funcionando você pode colocar um texto na tela e fazer um link a essa variável. Essa parte é um pouco chatinha mas se você for seguindo as outras partes do curso numa aula eu mostro como fazer essa parte da pontuação pra você ter uma ideia de como fazer o texto :)

Fiz até aí, mas poderia me explicar como fazer o link? Gostaria de fazer uma brincadeira aqui em casa com esse jogo, marcando a pontuação, e como aconteceria no sábado não sei se vou chegar no outro curso a tempo /:

Você pode no create da Hierarquia ir em Create > UI > Text. Isso vai criar um texto e você entrar em modo 2D para posicioná-lo melhor na tela.

Depois disso no seu script você vai importar no comecinho o módulo de interface da Unity.

using UnityEngine.UI;

Depois crie uma variável do tipo Text.

public Text TextoPontuacao;

Agora só colocar algo assim no Update

TextoPontuacao.text = SuaVariavelDePontuacao;

Isso vai fazer o texto mudar de acordo com a sua variável.

esse script seria o do jogador?

Isso.

estou recebendo o erro error CS0029: Cannot implicitly convert type 'int' to 'string'

control player:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class ControlPlayer : MonoBehaviour
{
    public Text TextoPontuacao;
    public float Velocidade = 10;
    private Vector3 direcao;
    public LayerMask MascaraChao;
    public GameObject TextoGameOver;
    public bool Vivo = true;
    public int Pontuacao;

    private void Start()
    {
        Time.timeScale = 1;
    }

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

        float eixoX = Input.GetAxis("Horizontal");
        float eixoZ = Input.GetAxis("Vertical");

        direcao = new Vector3(eixoX, 0, eixoZ);

        if (direcao != Vector3.zero)
        {
            GetComponent<Animator>().SetBool("Movendo", true);
        }
        else
        {
            GetComponent<Animator>().SetBool("Movendo", false);
        }

 if (Vivo == false) {

            if (Input.GetButtonDown("Fire1"))
            {
                SceneManager.LoadScene(0);
            }
        }

         TextoPontuacao.text = Pontuacao;  

    }

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

        Ray raio = Camera.main.ScreenPointToRay(Input.mousePosition);
        Debug.DrawRay(raio.origin, raio.direction * 100, Color.red);

        RaycastHit impacto;

        if (Physics.Raycast(raio, out impacto, 100, MascaraChao))
        {
            Vector3 posicaoMiraJogador = impacto.point - transform.position;

            posicaoMiraJogador.y = transform.position.y;

            Quaternion novaRotacao = Quaternion.LookRotation(posicaoMiraJogador);

            GetComponent<Rigidbody>().MoveRotation(novaRotacao);



}
        }
    }

bala:

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

public class Bala : MonoBehaviour
{
    public float Velocidade;
    public ControlPlayer Myriah;
    // Update is called once per frame
    void FixedUpdate()
    {
        GetComponent<Rigidbody>().MovePosition
        (GetComponent<Rigidbody>().position + transform.forward * Velocidade * Time.deltaTime);
    }

    void OnTriggerEnter(Collider objetoDeColisao)
    {
        if(objetoDeColisao.tag == "Inimigo") {


        Destroy(objetoDeColisao.gameObject);
    }
    Destroy(gameObject);
    Myriah.Pontuacao++;
    }
}

Você teria que converter o inteiro em string algo como:

TextoPontuacao.text = Pontuacao.ToString();

ou

TextoPontuacao.text = "" + Pontuacao;

Resolvi esse problema, mas a pontuação não é marcada, segue como 0. Acho que é pelo script da bala, pois na hora de preencher a variável pública que faz referência à jogadora, ele não me permite preencher com a minha personagem

Você pode usar a Tag como fizemos com o Inimigo.

algo como

Jogador = GameObject.FindWithTag("Player");

na parte de colisão?

Na bala ficaria algo assim.

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

public class Bala : MonoBehaviour
{
    public float Velocidade;
    public ControlPlayer Myriah;

    void Start()
    {
        Myriah = GameObject.FindWithTag("Jogador").GetComponent<ControlPlayer>();
    }
    // Update is called once per frame
    void FixedUpdate()
    {
        GetComponent<Rigidbody>().MovePosition
        (GetComponent<Rigidbody>().position + transform.forward * Velocidade * Time.deltaTime);
    }

    void OnTriggerEnter(Collider objetoDeColisao)
    {
        if(objetoDeColisao.tag == "Inimigo") {


        Destroy(objetoDeColisao.gameObject);
    }
    Destroy(gameObject);
    Myriah.Pontuacao++;
    }
}

Consegui!! Muito obrigada, professor

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