Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
22
respostas

não reinicia

Na parte final dessa aula que tratamos da parte de reiniciar o game quando da "game over" apos clicar pra reiniciar ele fica pausado, clicando outras vezes continua pausado.

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

public class ControlaJogador : MonoBehaviour
{
    public GameObject TextoGameOver;
    public LayerMask MascaraChao;
    public float Velocidade = 10;
    public bool Vivo = true;
    Vector3 direcao;

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

    void Update()
    {
        //Inputs do Jogador - Guardando teclas apertadas
        float eixoX = Input.GetAxis("Horizontal");
        float eixoZ = Input.GetAxis("Vertical");

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

        //Animações do Jogador
        if (direcao != Vector3.zero)
        {
            GetComponent<Animator>().SetBool("Movendo", true);
        }
        else
        {
            GetComponent<Animator>().SetBool("Movendo", false);
        }

        if(Vivo == false)
        {
            if (Input.GetButtonDown("Fire1"))
            {

                SceneManager.LoadScene("Zumbirama");

            }
        }

    }

    void FixedUpdate()
    {
        //Movimentação do Jogador por segundo
        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);
        }
    }
}
22 respostas

Oi, Raul, tudo bem?

Você pode colocar o código do inimigo aqui também? Porque reiniciar o código depende dos dois então é bom olhar o outro também.

Uma coisa que você pode testar também é na linha que você reinicia o jogo testar se ela está rodando, algo assim:

if(Vivo == false)
{
    if (Input.GetButtonDown("Fire1"))
    {
        Debug.Log("Clique para reiniciar o jogo");
        SceneManager.LoadScene("Zumbirama");
    }
}

Essa linha Debug.Log("Clique para reiniciar o jogo"); manda uma mensagem no console, se ela tiver aparecendo o clique está funcionando corretamente e talvez o que esteja errado é o nome da Cena, ou não colocar a Cena na parte de builds, por exemplo.

Bons estudos :)

fiz o teste e a mensagem aparece normalmente no console, É a cena então, no código o nome ta igual eu coloquei "Zumbirama" talvez seja esse questão de builds ai que vc falou porem eu não consegui fazer kkkk

Legal! Então é só ir em File > Build Settings e jogar a sua Cena para a parte de Cenas pra ela constar como build.

Se não der certo depois disso você pode tentar trocar o nome por SceneManager.LoadScene(0); já que esta cena será a primeira da lista.

fiz a modificação agora quando clico em vez de dar um pequeno play fica estática a tela

e mostra o seguinte erro no console:

Scene '0' couldn't be loaded because it has not been added to the build settings or the AssetBundle has not been loaded. To add a scene to the build settings use the menu File->Build Settings... UnityEngine.SceneManagement.SceneManager:LoadScene(String) ControlaJogador:Update() (at Assets/Scripts/ControlaJogador.cs:42)

Como está seu Build Settings?

Na parte de Scenes in Build tem somente a cena "Zumbirama" que está com um 0 na frente?

Ou não tem nenhuma? Se não tiver nenhum tem que arrastar a cena para essa parte ou abrir a cena e clicar no botão: Add Open Scenes.

Se quiser mandar o projeto em .zip eu posso dar uma olhada aqui também. Você pode subir no Google Drive, Dropbox, ou qualquer outro serviço destes. Só lembre de deixar o link público.

Exatamente como você falou no build settings tem somente o "Zumbirama" e na frente tem 0, de qualquer forma anexei pra vc olhar melhor.

https://drive.google.com/open?id=1pbz_lZFxbuljfCjWwa5v5LdQ3AHSSO-W

Oi, Raul, tudo bom?

Dei uma olhada aqui o que estava errado era o parâmetro da chamada do método o LoadScene aceita string ou int então você pode usar de duas formas:

SceneManager.LoadScene(0); ou SceneManager.LoadScene("Zumbirama"); estava o número como string "0", isso não pode a não ser que o nome da sua Cena seja o número 0.

Aí agora está reiniciando normal. Outros problemas que vi é que na sua animação de ataque tem dois eventos de AtacarJogador e também no seu Animator, 'Atacar' está por padrão como true o que é ruim porque ele começa rodando ataque.

O erro era somente a chamada do método mas essas outras coisas vão fazer seu jogo ser mais consistente na hora de reiniciar.

Veja se consegue resolver, bons estudos :)

vou tentar resolver então por partes, como é minha primeira vez mexendo com esse programa to apanhando kkkk(desculpe por isso) em fim estou em duvida se o problema e no programa unity ou no código,

fiz a primeira alteração que e na parte:

SceneManager.LoadScene("Zumbirama");

salvei e não reinicia

Troca pra SceneManager.LoadScene(0); e roda novamente.

Veja se reinicia.

Sem problema, o importante é ir estudando mesmo e aos poucos ir evoluindo no software e também o seu jogo :)

Vou tentar explicar o que acontece nas duas modificações:

SceneManager.LoadScene(Zumbirama);

nessa primeira modificação quando o zumbi toca o jogador é eu clico para reiniciar o jogo ele inicia por cerca de 1 segundo e para! é se eu clicar novamente faz a mesma coisa e se mantem parado com a mensagem de "Você perdeu! clique para recomeçar"

A tela de Hierarquia se limpa.

SceneManager.LoadScene(0);

com essa segunda quando clico para reiniciar o jogo não acontece exatamente nada a tela fica estatica.

Na tela de Hierarquia bala(clone) se multiplica.

Então, ele inicia por 1 segundo e você já perde o jogo porque o ataque do seu zumbi está como padrão true, aí ele começa atacando e você já perde.

Muda no Animator do Zumbi o Atacar para false.

Tente fazer isso e vê se resolve.

Você esta falando das setas de transição de andar para ataque? qual das duas devo mudar para false?

É o parâmetro usado na transição no ataque. É que ele tava true ai ele transita antes de perceber que tem que virar false e voltar.

Fiz a alteração que você indicou mudando dentro da transição o botão: atacando para: false e testei continua parado e dando o play de 1sec

lembrando que o andar esta em: true

Oi, Raul.

Me manda de novo o projeto atualizado? hehe

Porque aqui quando peguei o projeto que você tinha mandado pelo Google Drive foi só mexer lá no LoadScene e tirar o Atacando do Animator do zumbi de true(por padrão) para false e o jogo agora reinicia normalmente.

Isso fez reiniciar normalmente mas uma outra coisa que foi legal mexer pra melhorar o jogo foi que lá no corte da Animação quando criamos o Evento, ele está chamando duas vezes, mas isso não impacta em nada o jogo é só um detalhe para melhorar.

Verifica pra mim então:

https://drive.google.com/open?id=1p-JFl3jTFjIA-R3IuYlixZ-R8mZ-7hup

Oi, Raul, foi isso mesmo que falei só tirei o Atacando de true para false.

Uma coisa que fiz pra facilitar e garantir que sempre estará false ao reiniciar e poder testar isso foi colocar no Start do zumbi a linha de mudar isto:

void Start () {
        GetComponent<Animator>().SetBool("Atacando", false);
}

Isso resolveu, mas uma coisa também é que sua animação de ataque ainda tem dois eventos um no inicio e outro no meio, então não dá pra ver o zumbi batendo no Jogador, se você quer que continue assim e seja quando o zumbi toque no jogador você pode usar o OnCollisionEnter.

Qualquer coisa me avise.

O código resolveu nem acredito kkkk

realmente o zumbi n esta fazendo a animação de atk ele so vem vindo e acaba o jogo, como seria o coreto pra mostrar a animação antes de perder?

Não existe certo nesse caso, é mais uma escolha sua de Design. Se você quer algo que só ao encostar já perca o jogo nem compensa usar essa parte de Animation Event mas se quer fazer o seu zumbi bater mesmo compensa tirar esse Evento do início e fazer ele bater de fato.

É mais uma escolha sua mesmo. Na parte dois eu uso o ataque porque vamos tirar vida do personagem, mas você também pode mudar isso afinal você que está programando o jogo hehe.

Bons estudos :)

acho que o que você disse tem mais sentido kkk afinal se existisse zumbi eles provavelmente bateriam ou tentariam morder algo do tipo... fora essa questão ai pra simbolizar a vida do personagem

não estou conseguindo identificar onde tenho que mexer pra alterar

Lembra quando fez o corta dos quadros da animação? Clica no arquivo da animação do ataque do zumbi depois na animação e ela já vai estar cortada, até aí tudo bem.

Embaixo disso a parte de Events aí terá duas marcações (É bem difícil de ver mesmo) clique na primeira no começo da animação e aperte o delete.

Aí fica só um no meio da animação mais ou menos.

solução!

Deu certo man obg!