Solucionado (ver solução)
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!