Пример #1
0
    void FixedUpdate()
    {
        rb.velocity = Vector3.zero;
        bool  apertouAtaque = Input.GetButtonDown("Fire1");
        float movH          = Input.GetAxis("Horizontal");
        float movV          = Input.GetAxis("Vertical");

        if (apertouAtaque)
        {
            anim.SetTrigger("atacou");
            sistemaDeSom.Emitir(SistemaSom.EfeitoSonoro.Golpe);
        }

        Vector3 mov = new Vector3(movH, 0, movV);

        tr.LookAt(tr.position + trCam.TransformDirection(mov) * 5);

        if (mov.magnitude > 1f)
        {
            mov.Normalize();
        }

        tr.Translate(0, 0, mov.magnitude * velocidadeMov * Time.deltaTime);

        anim.SetFloat("velocidade", mov.magnitude);
        //anim.SetBool("estaNoChao", estaNoChao);

        RaycastHit hit;
        bool       rcBateyBiChao = Physics.Raycast(
            tr.position,
            Vector3.down,
            out hit,
            Mathf.Infinity,
            camadaChao);

        if (rcBateyBiChao)
        {
            Vector3 pos = tr.position;
            pos.y       = hit.point.y + deslocamentoAltura;
            tr.position = pos;
        }
    }
Пример #2
0
 public void DiminuirVida(float dano)
 {
     vida = vida - dano;
     sistemaDeSom.Emitir(efeitoSonoroDano);
 }
Пример #3
0
 public void Atacar()
 {
     vidaJogador.DiminuirVida(dano);
     sistemaDeSom.Emitir(SistemaSom.EfeitoSonoro.Golpe);
 }
Пример #4
0
 public void AnimEvt_EfeitoSonoro_Passo()
 {
     sistemaDeSom.Emitir(SistemaSom.EfeitoSonoro.Passo);
 }
    void FixedUpdate()
    {
        // receber dados de entrada do jogador
        bool apertouPulo   = Input.GetButtonDown("Jump");
        bool apertouAtaque = Input.GetButtonDown("Fire1");
        bool apertouMagia  = Input.GetButtonDown("Fire2");

        float movH = Input.GetAxis("Horizontal");
        float movV = Input.GetAxis("Vertical");

        Vector3 mov = new Vector3(movH, 0, movV);

        if (mov.magnitude > 1f)
        {
            mov.Normalize();
        }

        // detecta estados
        RaycastHit chaoHit;

        estaNoChao = Physics.Raycast(
            tr.position,
            Vector3.down,
            out chaoHit,
            deslocamentoAltura + 0.05f,
            camadaChao
            );

        estaEmPulo      = apertouPulo || !estaNoChao;
        estaEmMovimento = mov.magnitude > 0.1f;

        // ataque
        if (apertouAtaque && !estaEmPulo && !colisorMartelo.enabled)
        {
            anim.SetTrigger("atacou");
            colisorMartelo.enabled = true;
            trilhaMartelo.enabled  = true;
            Invoke("DesativarMartelo", 0.2f);
        }

        // magia
        if (apertouMagia && !estaEmPulo && !colisorMartelo.enabled && !magiaUsada)
        {
            anim.SetTrigger("magia");
            magiaUsada = true;
            Invoke("DesativaMagia", 0.2f);

            GameObject magiaGbj = Instantiate <GameObject>(projetilMagia, pontoTiro.position, pontoTiro.rotation);
            Rigidbody  magiaRb  = magiaGbj.GetComponent <Rigidbody>();
            magiaRb.AddForce(magiaGbj.transform.forward * forcaLancamentoMagia, ForceMode.Impulse);
        }

        // pulo
        rb.useGravity  = estaEmPulo;
        rb.constraints = (
            RigidbodyConstraints.FreezeRotationX |
            RigidbodyConstraints.FreezeRotationY |
            RigidbodyConstraints.FreezeRotationZ
            );
        if (!estaEmPulo)
        {
            rb.constraints = rb.constraints | RigidbodyConstraints.FreezePositionY;
        }

        if (apertouPulo && estaNoChao)
        {
            rb.AddForce(Vector3.up * intensidadePulo, ForceMode.Impulse);
            sistemaDeSom.Emitir(SistemaSom.EfeitoSonoro.Pulo);
        }

        // rotacionar o jogador na direção do movimento
        if (estaEmMovimento)
        {
            tr.LookAt(tr.position + trCam.TransformDirection(mov) * 5);
        }

        // andança do jogador
        if (estaEmMovimento)
        {
            tr.Translate(0, 0, mov.magnitude * velocidadeMov * Time.deltaTime);
        }

        // alimentando parâmetros anim
        anim.SetFloat("velocidade", mov.magnitude);
        anim.SetBool("estaNoChao", estaNoChao);

        // acompanhar chão
        if (!estaEmPulo)
        {
            RaycastHit hit;
            bool       rcBateuNoChao = Physics.Raycast(
                tr.position,
                Vector3.down,
                out hit,
                Mathf.Infinity,
                camadaChao
                );

            if (rcBateuNoChao)
            {
                Vector3 pos = tr.position;
                pos.y       = hit.point.y + deslocamentoAltura;
                tr.position = pos;

                pontoChao = hit.point;
            }

            // zerar inercia
            rb.velocity = Vector3.zero;
        }
    }