Jump to content
Sign in to follow this  
Fabri15544

Personaje se detenga por `x` tiempo

Recommended Posts

Como puedo hacer que el enemigo se quede quieto con un tiempo especifico? este es mi codigo no sean malos soy novato y tengo un desorden

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

public class Target : MonoBehaviour
{
    public float health = 100f;
    public Image imagenBarraVida;
    public Animator anim;
    public GameObject Dormido;
    public NavMeshAgent agent;
    public GameObject Enemigo;
    public float distance;

    public void Sumarvida(float cantidad)
    {
        if (health > 0)
        {
            health += cantidad;
        }
    }

    private void Start()
    {
        anim = GetComponent<Animator>();
    }

    public void TakeDamage (float amount)
    {
        health -= amount;
        if (health <= 0f)
        {
            Die();
            Corre();
        }


    }
    // Start is called before the first frame update
    void Die()
    {
        anim.Play("Dormido");
        agent.enabled = false;
        agent.acceleration = 0;

    }

    void Corre()
    {


        anim.Play("Run");
        agent.enabled = true;


    }


    // Update is called once per frame
    void Update()
    {
        health = Mathf.Clamp(health, 0, 100);

        imagenBarraVida.fillAmount = health / 100;


    }
}

 

Share this post


Link to post
Share on other sites

Hola lo que quiero decir con eso es que en la parte de la animación el NavMeshAgent  se quede quieto por 10 segundos y retome la animación de correr e probado con agent.enabled = false; pero claro se para por completo, tengo entendido que para hacer que esto funcione necesito declarar la entrada en if y else 

    void Die()
    {
        anim.Play("Dormido");
        agent.enabled = false;
        agent.acceleration = 0;

    }

    void Corre()
    {


        anim.Play("Run");
        agent.enabled = true;


    }

 

 

Edited by Fabri15544

Share this post


Link to post
Share on other sites

algo así quiero hacer no lo probé todavía, esa seria la idea y después se cura la vida y comienza otra vez. lo tengo en otro script

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

public class prueba : MonoBehaviour
{

    public bool ZZZZ = false;
    public float health = 100f;
    public float dormido = 10;
    public float tiempoNoMorir = 10;
    public float tiempo_frenado = 10;

    Animator anim;

    public void RestarVida(float cantidad)
    {
        if (!ZZZZ && health > 0)
        {
            health -= cantidad;
            StartCoroutine(TiempoEspera());
            StartCoroutine(VelocidadRestar());
            if (health <= 0)
            {
                Tiempo();

            }


            void Tiempo()
            {
                Debug.Log("ZZZZ");
                anim.Play("Dormido");
                IEnumerator TiempoMuerto()
                {
                    var Velocidad = GetComponent<Target>().agent.acceleration;
                    GetComponent<Target>().agent.acceleration = 0;
                    yield return new WaitForSeconds(dormido);
                    GetComponent<Target>().agent.acceleration = Velocidad;
                }

            }
        }


        IEnumerator TiempoEspera()
        {
            ZZZZ = true;
            yield return new WaitForSeconds(tiempoNoMorir);
            ZZZZ = false;
        }

        IEnumerator VelocidadRestar()
        {
            var velocidad0 = GetComponent<Target>().agent.acceleration;
            GetComponent<Target>().agent.acceleration = 0;
            yield return new WaitForSeconds(tiempo_frenado);
            GetComponent<Target>().agent.acceleration = velocidad0;
        }

    }

}

 

Share this post


Link to post
Share on other sites

Buenas tardes compañero, que conste que yo me considero novato como tu, pero puedes crear un temporizador muy fácilmente creando una variable de tipo flotante y después dentro de update ir sumándole el número que tu quieras para después con un if, con un case o de la forma que mejor te venga utilizar ese tiempo. Te pongo un ejemplo:

private float Tiempo_Espera;

void Update () {

Tiempo_Espera = Tiempo_Espera + 1 * time.deltatime;

    if (Tiempo_Espera > 1) {

        Aquí lo que quieras que haga...

        Tiempo_Espera = 0;

    }

}

De paso me gustaría que los mas entendidos explicasen si este método (que utilizo muy a menudo) es conveniente o no, porque últimamente he visto cosas raras en mi juego y no se a que se pueden estar debiendo, por lo que si existe alguna forma mejor de crear contadores, por favor díganlo.

Un saludo.

  • Like 1

Share this post


Link to post
Share on other sites

gracias por tu respuesta me ayudo mucho, ahora solo me falta asociar la variable vida a a la variable tiempo_espera y listo esa parte. 

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...