Jump to content
Flauros

Como hago para que mi personaje no se mueva mientras ataca

Recommended Posts

Hola chicos necesito ayuda:

Cómo hago para que mi personaje deje de moverse mientras realiza el ataque? Este es mi código: el trigger de atacar se llama "Ataque" y la animación de atacar se llama "Atacar"

public class MiClase : MonoBehaviour {
    Animator anim;
    Rigidbody2D rb;
    public float fuerzaSalto;
    public bool enSuelo;
    public Transform refPie;
    public float velX = 10f;
    CircleCollider2D attackCollider;
    
    void Start () {
        anim = GetComponent<Animator> ();
        rb = GetComponent<Rigidbody2D> ();
        attackCollider = transform.GetChild (0).GetComponent<CircleCollider2D> ();
        attackCollider.enabled = false;
    }

    void Update () {
        float movX;
        movX = Input.GetAxis ("Horizontal");
        anim.SetFloat ("absMovX", Mathf.Abs (movX));
        rb.velocity = new Vector2 (velX * movX, rb.velocity.y);
        enSuelo = Physics2D.OverlapCircle (refPie.position, 1f, 1 << 8);
        anim.SetBool ("enSuelo", enSuelo);
        if (Input.GetButtonDown ("Jump") && enSuelo)

        {
            rb.AddForce (new Vector2 (0, fuerzaSalto), ForceMode2D.Impulse);
        }

        AnimatorStateInfo stateInfo = anim.GetCurrentAnimatorStateInfo (0);
        bool Ataque = stateInfo.IsName ("Atacar");

        if (Input.GetKeyDown ("f") && !Ataque) {
            anim.SetTrigger ("Ataque");
        }

        { }

        if (movX < 0) transform.localScale = new Vector3 (-5, 5, 1);
        if (movX > 0) transform.localScale = new Vector3 (5, 5, 1);

        {
            Camera.main.transform.position = new Vector3 (transform.position.x, 0, -20);
        }

    }
}

 

   

  • Like 1

Share this post


Link to post
Share on other sites

No me he mirado tu código... que me da mucho palo.. XD pero podrías crear un bool llamado isInAtack... 

y hacer que solo te puedas mover si ese bool es igual a true....

luego creas un dos eventos, y los llamas mediante el animator....

No se si me he explicado

Share this post


Link to post
Share on other sites

Verás esq tengo un pequeño trastorno mental  desde los 5 años (TDAH) y me cuesta mucho entender tanto cómo funciona el foro como usar Unity y el C# .. si pudieras escribirme el código y decirme si tengo que hacer algo en el animator te estaría eternamente agradecido. Llevo días sin poder resolver el problema 😕

Share this post


Link to post
Share on other sites

Buenas @Flauros, yo también tengo TDA (sin la h) y: depresión, insomnio, ansiedad social, dislexia, migraña y una tontería encima de las que asustan.... 

Con esto quiero decir, que eso no tiene por que ser un problema, yo yebo un año en unity, apenas se nada, y todavía no me he rendido... me cuesta, pero no me he rendido.

Que tengas tdha no significa nada... y te digo (por experiencia propia), que abanderarse con un (TENGO TDAH) solo ayudara a auto limitarte. Tu no eres tu enfermedad, tu eres tu, y como tu eres tu, de ti depende entender o no las cosas, eso si, a tu ritmo.

Dicho esto (que espero te aya resultado algo inspirador), me he explicado como el mismísimo culo, así que aquí va mi pseudo masterclass

 

Sustituye tu código por el siguiente

public class MiClase : MonoBehaviour {
    Animator anim;
    Rigidbody2D rb;
    public float fuerzaSalto;
    public bool enSuelo;
    bool underAttack = false; //añadido
    public Transform refPie;
    public float velX = 10f;
    CircleCollider2D attackCollider;
    
    void Start () {
        anim = GetComponent<Animator> ();
        rb = GetComponent<Rigidbody2D> ();
        attackCollider = transform.GetChild (0)
            .GetComponent<CircleCollider2D> ();
        attackCollider.enabled = false;
    }
    
    public void OnAttack () {
        underAttack = true;
    }
    
    public void NotAttacking () {
        underAttack = false;
    }
    
    void Update () {
        float movX;
        movX = Input.GetAxis ("Horizontal");
        anim.SetFloat ("absMovX", Mathf.Abs (movX));
        rb.velocity = new Vector2 (velX * movX, rb.velocity.y);
        enSuelo = Physics2D.OverlapCircle (refPie.position, 1f, 1 << 8); // cuando el pie está cerca del suelo
        anim.SetBool ("enSuelo", enSuelo);
        if (Input.GetButtonDown ("Jump") && enSuelo) {
            rb.AddForce (new Vector2 (0, fuerzaSalto), ForceMode2D.Impulse);
        }
        AnimatorStateInfo stateInfo = anim.GetCurrentAnimatorStateInfo (0);
        bool Ataque = stateInfo.IsName ("Atacar");
        //animacion de ataque
        if (Input.GetKeyDown ("f") && !Ataque) {
            if (underAttack == false) anim.SetTrigger ("Ataque");
        }
        //girarse
        if (movX < 0) transform.localScale = new Vector3 (-5, 5, 1);
        if (movX > 0) transform.localScale = new Vector3 (5, 5, 1);
        //camara
        {
            Camera.main.transform.position = new Vector3 (transform.position.x, 0, -20);
        }
    }
}

Luego en la animación de ataque, nada mas iniciar, pones lo siguiente

image.png

te aparecerá lo siguiente en el inspector

image.png

Seleccionas la función OnAttack(), luego, al final de la animación de ataque haces lo mismo, solo que esta vez seleccionas NotAttacking().. y ala, a disfrutar

 

Luego ya te explico mejor para que es cada cosa, pero ahora no tengo tiempo

 

Suerte!

  • Like 1

Share this post


Link to post
Share on other sites

En primer lugar gracias de corazón por el código.

En segundo lugar (EL RESPETO FORMA PARTE DE LAS REGLAS DEL FORO) tengo un TDAH bastante grave con dependencia de campo que me impide procesar y atender bien la información. No pude aprender a leer hasta los 8 años. No hables de.lo que no sabes e infórmate mejor porque se nota tu desconocimiento. Tengo severos problemas y tomo medicación ante crisis epilépticas, así que si no sabes.mi historia no la juzgues sin conocerla.

Muchas gracias, de corazón, por el código porque gracias a ello podré seguir, un saludo amigo

Share this post


Link to post
Share on other sites

hola

creo que lo que dice @nomoregames es que poner una enfermedad como excusa es algo contraproducente para ti mismo.... si te excusas diciendo que no puedes porque tienes tal enfermedad pues entonces tu mismo te estas poniendo trabas a ti mismo....

...porque entonces, como tienes tal enfermedad, para que hacer nada....

con esto no quiero menospreciar tu enfermedad.... sino que quiero decir que no deves dejar que la enfermedad te diga lo que puedes y lo que no... que la enfermedad decida por ti...

pero si incluso he visto en internet un señor sin brazos que toca la guitarra... sin brazos!!! y la toca mejor que yo!!!.. que me pegue tocando en un grupo (amateur) 8 años...

bueno.... si te he parecido un "borde"  lo siento...

en esta pagina estamos para ayudar y para aprender. no dejes que te asustemos.... que aqui somos todos buena gente....

y no te des por vencido con la programacion.... cuesta.... pero cuando vas aprendiendo es muy satisfactorio...

si sigues sin conseguir que funcione lo que quieres haces pues comentanos...

y si tienes cualquier otra duda pues lo mismo.... habres un nuevo post en la categoria que corresponda, y estaremos encantados de contestar.

PD.  si vas a "postear" codigo hay arriba (del editor donde escribes el post) hay un simbolo asi "<>" con ese boton abres un panel de texto donde puedes pegar tu codigo....  y abajo de ese panel hay un menu desplegable donde puedes elegir "C" como lenguaje que estas usando.... y asi el codigo queda como el que te ha posteado @nomoregames

un saludo y sigue dandole!

  • Thanks 1

Share this post


Link to post
Share on other sites

Noooo, no era mi intención ofenderte, en serio. No estoy juzgándote, ni diciendo que todo sea imaginación tuya ni nada por el estilo. Se dé primera mano, la poca importancia que se le dan a los trastornos mentales... viví toda la infancia siendo el "tonto" el que no se entera. Con el tiempo, se dieron cuenta de que esa "tontería", no era ni más ni menos que un trastorno mental. Ante el desconocimiento de los demás, ante su negativa a entender que me costara más entender lo que ellos comprendían tan fácilmente siempre ponía el mismo ejemplo: tú a un cojo no le dirás que se ponga a correr, ese cojo puede llegar perfectamente a los mismos objetivos que el "normal", solo que a su tiempo y modo... pues lo mismo con el TDAH.

No es bueno, para nada, ir gritándolo... no todo el mundo es capaz de comprender esas dificultades, y se alejan de ti como si apestaras... por eso es mucho mejor no ir diciéndoselo a todo el mundo... ese es un consejo. Y te aseguro, que de enfermedades mentales... sé un rato XD... he pasado por más psicólogos que el demente que ideó el hobbit.

Dicho esto, pido disculpas si te he ofendido... solo pretendía compartir mi experiencia... si quieres que lo hablamos mejor, te mando mi Gmail y lo hablamos en privado... en serio que no quería menospreciarte 

  • Like 1

Share this post


Link to post
Share on other sites
54 minutes ago, nomoregames said:

el demente que ideó el hobit.

que es un hobit?

una aficiont?

  • Like 1

Share this post


Link to post
Share on other sites

Disculpas aceptadas. Como consejo no hablen de trastornos mentales si no estudian psicología. Un saludo y gracias por leerme ^^ 

Share this post


Link to post
Share on other sites
42 minutes ago, Flauros said:

Disculpas aceptadas. Como consejo no hablen de trastornos mentales si no estudian psicología. Un saludo y gracias por leerme ^^ 

Si aplicáramos lo mismo para quienes preguntan sobre programación.. 

Share this post


Link to post
Share on other sites
7 hours ago, francoe1 said:

Si aplicáramos lo mismo para quienes preguntan sobre programación.. 

🤣🤣🤣

No pude contenerme.

  • Thanks 1

Share this post


Link to post
Share on other sites

Que interesante esto del TDAH!!!  😴.    Creo que estudiaré psicología para poder hablar del tema.

Share this post


Link to post
Share on other sites

al final esto se esta desviando demasiado....

para que el personaje no se mueva mientras dura el ataque puedes usar una variable float (llamarla por ejemplo: tiempoDeAtaque) cuando le des al boton de ataque puedes hacer que esa variable sea 0.8f o 1.4f o lo que dure el ataque.... y luego creas un "if" donde compruevas si esa variable es mayor que cero.....    si SI es mayor que cero entonces haces que esa variable disminuya el tiempo que ha trascurrido (tiempoDeAtaque -= Time.deltaTime;)

y en ese "if" pones despues un "else"...

y entonces si la variable NO es mayor que cero pues AHI pones las lineas que hacen que tu personaje se mueva

Edited by Igor

Share this post


Link to post
Share on other sites

×
×
  • Create New...