4
respostas

Não atira, só reinicia

Não importa como eu olhe o código esta certo, mas sempre que eu clico no Fire1 o jogo reinicia sem o personagem estar morto, ele nem mesmo atira.

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


public class ControlaJogador : MonoBehaviour
{

    public float Velocidade = 10;
    Vector3 direcao;
    public LayerMask MascaraChao;
    public GameObject TextoGameOver;
    public bool Vivo = true;

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


    void Update()
    {

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

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

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

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

        if(Vivo == false)
        {
            if(Input.GetButtonDown("Fire2"))
            {
                SceneManager.LoadScene("zombie_game");
            }
        }
    }

    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);
        }
    }


}
void AtacaJogador()
    {
        Time.timeScale = 0;
        Jogador.GetComponent<ControlaJogador>().TextoGameOver.SetActive(true);
        Jogador.GetComponent<ControlaJogador>().Vivo = false;
    }
4 respostas

Oi, Licia, tudo bem?

E como está seu código da arma?

O AtacaJogador está rodando normalmente com o zumbi atacando e você clicando pra reiniciar?

o codigo esta certinho e os zumbis me atacam, mas quando aperto para atirar o jogo reinicia, eu dei uma driblada nesse problema colocando que para reiniciar deveria clicar no Fire2, mas o jogo reinicia no meio da gameplay se o botão for apertado.

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

public class ControlaArma : MonoBehaviour {

    public GameObject Bala;
    public GameObject CanoDaArma;

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        if (Input.GetButtonDown("Fire1"))
            {

            Instantiate(Bala, CanoDaArma.transform.position, CanoDaArma.transform.rotation);
        }




    }
}
 void AtacaJogador()
    {
        Time.timeScale = 0;
        Jogador.GetComponent<ControlaJogador>().TextoGameOver.SetActive(true);
        Jogador.GetComponent<ControlaJogador>().Vivo = false;
    }

Oi, Licia, você chegou a trocar a variável Vivo no Inspector no Jogador?

Desmarcando a caixinha?

Sim isso mesmo e o codigo não está errado

O fire 2 é o segundo botão do mouse O SceneManager é uma das maneiras de chamar uma scena, você não é obrigada a colocar esse código do fire2 para recarregar a scena

 if(Input.GetButtonDown("Fire2"))
            {
                SceneManager.LoadScene("zombie_game");
            }

ele está falando "SE o botão fire2 for apertado ou o botão 1 do mouse, chame uma nova cena" e isso vai acontecer independente do que estiver ocorrendo, claro que você pode colocar um UI de SIM ou Não.

tenta isso no lugar desse fire2

if(Input.getKeyDown("q")){
     SceneManager.LoadScene("zombie_game");
}

toda vez que você apertar a letra q ele vai carregar a página, tem que ver se é getKeyDown ou GetKeyDown