Jump to content
Alexcloud

Jugador paralizado - multiples problemas

Recommended Posts

Hola gente, quisiera algo de ayuda de ser posible, he pasado dias tratando de resolver un problema con una animacion que debería ejecutarse con un trigger, pero el trigger queda activado todo el tiempo, si el player queda quieto se lanza a atacar como berserker y no quiero, quiero que el ataque se ejecute con z, espacio, o cualquier tecla, pero no a lo loco, pueden ayudarme? Dejaré todo el codigo aqui del playerController a ver si alguien puede ver que estoy haciendo mal.

 

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

public class PlayerController : MonoBehaviour {

    public float maxSpeed = 5f;
    public float speed = 10f;
    public bool grounded;
    public bool attacking;
    public float jumpPower = 7f;

    private Rigidbody2D rb2d;
    private Animator anim;
    private bool jump;

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

    void Update()  {
        anim.SetFloat("Speed", Mathf.Abs(rb2d.velocity.x));
        anim.SetBool("Grounded", grounded);
        anim.SetBool("Attacking", attacking);
        anim.SetTrigger("Attack");
        anim.ResetTrigger("Attack");


        if(Input.GetKeyDown(KeyCode.UpArrow) && grounded){
            jump = true;
        } else {
            jump = false;
        }

    }

    void FixedUpdate(){
        Vector3 fixedVelocity = rb2d.velocity;
        fixedVelocity.x *= 0.75f; 

        if (grounded){
            rb2d.velocity = fixedVelocity;
        }

        float h = Input.GetAxis("Horizontal");

        rb2d.AddForce(Vector2.right * speed * h);

        float limitedSpeed = Mathf.Clamp(rb2d.velocity.x, -maxSpeed, maxSpeed);
        rb2d.velocity = new Vector2(limitedSpeed, rb2d.velocity.y);

        if (h > 0.01f) {
            transform.localScale = new Vector3(1f, 1f, 1f);
        }

        if (h < -0.01f) {
            transform.localScale = new Vector3(-1f, 1f, 1f);
        }

        if (jump){
            rb2d.velocity = new Vector2(rb2d.velocity.x, 0);
            rb2d.AddForce(Vector2.up * jumpPower, ForceMode2D.Impulse);
            jump = false;
            Debug.Log(rb2d.velocity.x);
        }
    }

    void Attacking(){
        if (Input.GetKeyDown(KeyCode.F)){
            attacking = true;
        } else {
            attacking = false;
        }
    }

    private void Attack()
    {
        if(attacking){
        anim.SetTrigger("Attack");
            attacking= true;
        } else {
            attacking = false;
        }
    }

    void OnBecameInvisible(){
        transform.position = new Vector3(-4,0,0);
    }

}

 

Share this post


Link to post
Share on other sites

Esto:

if(attacking){
        anim.SetTrigger("Attack");
            attacking= true;
        } else {
            attacking = false;
        }

dice que si attacking es verdadero entonces attacking es verdadero. Lo mismo para el caso falso, quizás sea alrevés?

Share this post


Link to post
Share on other sites
36 minutes ago, lightbug said:

Esto:


if(attacking){
        anim.SetTrigger("Attack");
            attacking= true;
        } else {
            attacking = false;
        }

dice que si attacking es verdadero entonces attacking es verdadero. Lo mismo para el caso falso, quizás sea alrevés?

ojala, pero tampoco es, no logro ejecutar el anim.Attack si quito el el     anim.ResetTrigger("Attack"); y si lo quito se pone a ejecutarlo como loco, cuando deberia funcionar con Space u otra tecla

Share this post


Link to post
Share on other sites

Tu problema es que no sabes bien como funcionan las animaciones. En primer lugar, un trigger de animación en true tiene un tiempo de ejecución. Si lanzas el reset inmediatamente después, se anulará. En el editor, señala el componente que tiene el animator y verás el flujo de las animaciones. Por otro lado, si el trigger no tiene manera de salir de su estado, se va a quedar repitiéndolo indefinidamente. Tienes que crearle una transición de salida.

Es mucho más complejo después que ésto aunque es un principio.

Share this post


Link to post
Share on other sites
33 minutes ago, iRobb said:

Tu problema es que no sabes bien como funcionan las animaciones. En primer lugar, un trigger de animación en true tiene un tiempo de ejecución. Si lanzas el reset inmediatamente después, se anulará. En el editor, señala el componente que tiene el animator y verás el flujo de las animaciones. Por otro lado, si el trigger no tiene manera de salir de su estado, se va a quedar repitiéndolo indefinidamente. Tienes que crearle una transición de salida.

Es mucho más complejo después que ésto aunque es un principio.

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

public class PlayerController : MonoBehaviour {

	public float maxSpeed = 5f;
	public float speed = 10f;
	public bool grounded;
	public float jumpPower = 7f;
	public float startTimeBtwAttack;
	public Transform attackPos;
	public float attackRange;
	public LayerMask whatIsEnemies;
	public int damage;
	public Animator anim;
	public Animator camAnim;

	private Rigidbody2D rb2d;
	private bool jump;
	private float timeBtwAttack;

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

	void Update()  {
		anim.SetFloat("Speed", Mathf.Abs(rb2d.velocity.x));
		anim.SetBool("Grounded", grounded);

		if(Input.GetKeyDown(KeyCode.UpArrow) && grounded){
			jump = true;
		} else {
			jump = false;
		}



		if(timeBtwAttack <= 0){
		//puedes atacar
			if(Input.GetKeyDown(KeyCode.Space)){
				camAnim.SetTrigger("shake");
				anim.SetTrigger("Attack");

				Collider2D[] enemiesToDamage = Physics2D.OverlapCircleAll(attackPos.position, attackRange, whatIsEnemies);
				for (int i = 0; i < enemiesToDamage.Length; i++) {
					enemiesToDamage[i].GetComponent<EnemyController>().TakeDamage(damage);
				}
			}
			timeBtwAttack = startTimeBtwAttack;
		} else {
			timeBtwAttack -= Time.deltaTime;
		}
	}



	void OnDrawGizmosSelected(){
		Gizmos.color = Color.red;
		Gizmos.DrawWireSphere(attackPos.position, attackRange);
	}

	void FixedUpdate(){
		Vector3 fixedVelocity = rb2d.velocity;
		fixedVelocity.x *= 0.75f; 

		if (grounded){
			rb2d.velocity = fixedVelocity;
		}

		float h = Input.GetAxis("Horizontal");

		rb2d.AddForce(Vector2.right * speed * h);

		float limitedSpeed = Mathf.Clamp(rb2d.velocity.x, -maxSpeed, maxSpeed);
		rb2d.velocity = new Vector2(limitedSpeed, rb2d.velocity.y);

		if (h > 0.01f) {
			transform.localScale = new Vector3(1f, 1f, 1f);
		}

		if (h < -0.01f) {
			transform.localScale = new Vector3(-1f, 1f, 1f);
		}

		if (jump){
			rb2d.velocity = new Vector2(rb2d.velocity.x, 0);
			rb2d.AddForce(Vector2.up * jumpPower, ForceMode2D.Impulse);
			jump = false;
			Debug.Log(rb2d.velocity.x);
		}
	}
	void OnBecameInvisible(){
		transform.position = new Vector3(-4,0,0);
	}

}

Vale, he estudiado un poco algunos tutoriales, pero ahora tengo un problema que nunca puedo solucionar, no consigo que se ejecute de ninguna forma,  no importa que coloque para que haga o active el trigger, no consigo que reaccione. Alguna sugerencia?

45 minutes ago, iRobb said:

Tu problema es que no sabes bien como funcionan las animaciones. En primer lugar, un trigger de animación en true tiene un tiempo de ejecución. Si lanzas el reset inmediatamente después, se anulará. En el editor, señala el componente que tiene el animator y verás el flujo de las animaciones. Por otro lado, si el trigger no tiene manera de salir de su estado, se va a quedar repitiéndolo indefinidamente. Tienes que crearle una transición de salida.

Es mucho más complejo después que ésto aunque es un principio.

también si no es mucha molestia, agradecería algo de asistencia, si me puedes ayudar te lo agradeceré un monton

Share this post


Link to post
Share on other sites

Bueno, sigo tratando, pero sigo sin poder resolver la incógnita de por qué no se me ejecuta el trigger attack o la animacion attack cuando aprieto Space. 

Dejo el código completo primero, y luego en especifico el código relacionado al ataque, cualquier experto que me pueda asistir se lo agradeceré.

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

public class PlayerController : MonoBehaviour {

	public float maxSpeed = 5f;
	public float speed = 10f;
	public bool grounded;
	public float jumpPower = 7f;
	public float startTimeBtwAttack;
	public Transform attackPos;
	public float attackRange;
	public LayerMask whatIsEnemies;
	public int damage;
	public Animator anim;
	public Animator camAnim;

	private Rigidbody2D rb2d;
	private bool jump;
	private float timeBtwAttack;

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

	void Update()  {
		anim.SetFloat("Speed", Mathf.Abs(rb2d.velocity.x));
		anim.SetBool("Grounded", grounded);

		if(Input.GetKeyDown(KeyCode.UpArrow) && grounded){
			jump = true;
		} else {
			jump = false;
		}



		if(timeBtwAttack <= 0){
		//puedes atacar
			if(Input.GetKeyDown(KeyCode.Space)){
				camAnim.SetTrigger("shake");
				anim.SetTrigger("Attack");

				Collider2D[] enemiesToDamage = Physics2D.OverlapCircleAll(attackPos.position, attackRange, whatIsEnemies);
				for (int i = 0; i < enemiesToDamage.Length; i++) {
					enemiesToDamage[i].GetComponent<EnemyController>().TakeDamage(damage);
				}
			}
			timeBtwAttack = startTimeBtwAttack;
		} else {
			timeBtwAttack -= Time.deltaTime;
		}
	}



	void OnDrawGizmosSelected(){
		Gizmos.color = Color.red;
		Gizmos.DrawWireSphere(attackPos.position, attackRange);
	}

	void FixedUpdate(){
		Vector3 fixedVelocity = rb2d.velocity;
		fixedVelocity.x *= 0.75f; 

		if (grounded){
			rb2d.velocity = fixedVelocity;
		}

		float h = Input.GetAxis("Horizontal");

		rb2d.AddForce(Vector2.right * speed * h);

		float limitedSpeed = Mathf.Clamp(rb2d.velocity.x, -maxSpeed, maxSpeed);
		rb2d.velocity = new Vector2(limitedSpeed, rb2d.velocity.y);

		if (h > 0.01f) {
			transform.localScale = new Vector3(1f, 1f, 1f);
		}

		if (h < -0.01f) {
			transform.localScale = new Vector3(-1f, 1f, 1f);
		}

		if (jump){
			rb2d.velocity = new Vector2(rb2d.velocity.x, 0);
			rb2d.AddForce(Vector2.up * jumpPower, ForceMode2D.Impulse);
			jump = false;
			Debug.Log(rb2d.velocity.x);
		}
	}
	void OnBecameInvisible(){
		transform.position = new Vector3(-4,0,0);
	}

}

 

		if(timeBtwAttack <= 0){
		//puedes atacar
			if(Input.GetKeyDown(KeyCode.Space)){
				camAnim.SetTrigger("shake");
				anim.SetTrigger("Attack");

				Collider2D[] enemiesToDamage = Physics2D.OverlapCircleAll(attackPos.position, attackRange, whatIsEnemies);
				for (int i = 0; i < enemiesToDamage.Length; i++) {
					enemiesToDamage[i].GetComponent<EnemyController>().TakeDamage(damage);
				}
			}
			timeBtwAttack = startTimeBtwAttack;
		} else {
			timeBtwAttack -= Time.deltaTime;
		}
	}

 

Share this post


Link to post
Share on other sites

Hola! El problema esta en la variable "startTimeBtAttack" que no tiene ningun valor.  Yo usaria algo como timeBtAttacks y le daria un valor fijo al inciar en el start o desde el editor para poder controlar cada cuanto tiempo quieres atacar.

 

public class PlayerController : MonoBehaviour
{
    private float timeBtwAttack;
    private float timeBtAttacks;

    void Start()
    {
     timeBtwAttack = 0;
     timeBtAttacks = 2;   
    }

    void Update()
    {
        if(timeBtwAttack <= 0)
        {

        //puedes atacar
            if(Input.GetKeyDown(KeyCode.Space))
            {
                timeBtwAttack = timeBtAttacks;
            }
        } 
        else 
        {
            timeBtwAttack -= Time.deltaTime;
        }
	}
}

 

Edited by Colorz

Share this post


Link to post
Share on other sites

Reglas del FORO

  1. El foro es hispanohablante, se agradeceria evitar titulos en ingles.
  2. No está permitido utilizar titulos en mayusculas. 

---------------

Presta atención, en la condición, estas asignando el valor de inicio en b cada vez que se cumple, esto genera un "bucle" infinito y solo tienes 1 tick para presionar el espacio, para solucionar este problema la siguiente linea deberia estar dentro del bloque IF que usas para detectar el espacio.

timeBtwAttack = startTimeBtwAttack;

Te recomiendo para este tipo de situaciones te recomiendo remplazar las 2 variables por una estructura.

[Serializable]
public struct ActionTime 
{
    public float ResetValue;
    public float MinValue;
    public float CurrentValue { get; private set; }

    public bool IsAvailable { get { return MinValue > CurrentValue; } }

    public void Update (float time) 
    {
        CurrentValue -= time;
    }

    public void Reset () {
        CurrentValue = ResetValue;
    }
}

 

Share this post


Link to post
Share on other sites
11 hours ago, Colorz said:

Hola! El problema esta en la variable "startTimeBtAttack" que no tiene ningun valor.  Yo usaria algo como timeBtAttacks y le daria un valor fijo al inciar en el start o desde el editor para poder controlar cada cuanto tiempo quieres atacar.

 


public class PlayerController : MonoBehaviour
{
    private float timeBtwAttack;
    private float timeBtAttacks;

    void Start()
    {
     timeBtwAttack = 0;
     timeBtAttacks = 2;   
    }

    void Update()
    {
        if(timeBtwAttack <= 0)
        {

        //puedes atacar
            if(Input.GetKeyDown(KeyCode.Space))
            {
                timeBtwAttack = timeBtAttacks;
            }
        } 
        else 
        {
            timeBtwAttack -= Time.deltaTime;
        }
	}
}

 

Hola, intenté lo que me dijiste, pero ahora se reproduce una unica vez, me refiero, a que le doy space y la animación se realiza, pero luego ya no vuelve a darse, es algo de una única vez

Share this post


Link to post
Share on other sites

Buenas otra vez amigos, primero que nada quiero agradecer a los que me han ayudado hasta ahora, conseguí realizar la cinematica de ataque que no podía antes, y tambien avanzar con la animación de daño y muerte tanto del enemigo como del jugador, pero ahora tengo un problema que agradecería me digan por qué sucede:

El player se congeló en su sitio, las animaciones se activan, puedo correr saltar atacar ser herido y hasta morir, pero no me muevo de mi sitio, ni para la izquierda ni derecha ni siquiera saltar bien, asi que quisiera me ayuden nuevamente, diré lo que pienso que es:

Creo que el problema radica en el script de daño, (HURT), porque cuando remuevo las transiciones de PlayerHurt y la misma animacion del animator, puedo volver a moverme y correr y hasta atacar, pero si lo dejo conectado PLAZ, me quedo clavado en el mismo punto. Dejaré el codigo para que lo analicen y me digan que puede ser, ademas de una captura de mi animator

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

public class PlayerController : MonoBehaviour {

	public bool grounded;
	public float maxSpeed = 5f;
	public float speed = 10f;
	public float jumpPower = 7f;
	public float attackRange = 0.75f;
	public int attackDamage = 20;
	public int maxHealth = 100;
	public int currentHealth;
	public Transform attackPos;
	public LayerMask whatIsEnemies;
	public Animator anim;

	private Rigidbody2D rb2d;
	private float timeBtwAttack;
	private float timeBtAttacks;
	private bool jump;

	void Start() {
		currentHealth = maxHealth;
		rb2d = GetComponent<Rigidbody2D>();
		anim = GetComponent<Animator>();
		timeBtwAttack = 0;
		timeBtAttacks = 1;   
	}

	void Update()  {
		anim.SetFloat("Speed", Mathf.Abs(rb2d.velocity.x));
		anim.SetBool("Grounded", grounded);

		if(Input.GetKeyDown(KeyCode.UpArrow) && grounded){
			jump = true;
		} else {
			jump = false;
		}

		if(timeBtwAttack <= 0)	{

			//puedes atacar
			if(Input.GetKeyDown(KeyCode.Space))
			{
				anim.SetTrigger("Attack");
				timeBtwAttack = timeBtAttacks;
				Collider2D[] hitEnemies = Physics2D.OverlapCircleAll(attackPos.position, attackRange, whatIsEnemies);

				//dañarlos
				foreach(Collider2D enemy in hitEnemies) {
					enemy.GetComponent<EnemyController>().TakeDamage(attackDamage);
				}
			}
		} 
		else 
		{
			timeBtwAttack -= Time.deltaTime;
			}
		}



	void OnDrawGizmosSelected(){
		if (attackPos == null)
			return;
		Gizmos.DrawWireSphere(attackPos.position, attackRange);
	}

	void FixedUpdate(){
		Vector3 fixedVelocity = rb2d.velocity;
		fixedVelocity.x *= 0.75f; 

		if (grounded){
			rb2d.velocity = fixedVelocity;
		}

		float h = Input.GetAxis("Horizontal");

		rb2d.AddForce(Vector2.right * speed * h);

		float limitedSpeed = Mathf.Clamp(rb2d.velocity.x, -maxSpeed, maxSpeed);
		rb2d.velocity = new Vector2(limitedSpeed, rb2d.velocity.y);

		if (h > 0.01f) {
			transform.localScale = new Vector3(1f, 1f, 1f);
		}

		if (h < -0.01f) {
			transform.localScale = new Vector3(-1f, 1f, 1f);
		}

		if (jump){
			rb2d.velocity = new Vector2(rb2d.velocity.x, 0);
			rb2d.AddForce(Vector2.up * jumpPower, ForceMode2D.Impulse);
			jump = false;
			Debug.Log(rb2d.velocity.x);
		}
	}
	void OnBecameInvisible(){
		transform.position = new Vector3(-4,0,0);
	}

	public void TakeDamage(int damage){

		if(currentHealth <= 0)
		{
			Die();
		} else {
			anim.SetTrigger("Hurt");
			currentHealth -= damage;
		}
	}

	void Die() {
		anim.SetBool("IsDead", true);
	}
}

El codigo que involucra por completo la animación de PlayerHurt es el public void Take Damage, me quedo sin ideas, asi que si se les ocurre algo soy todo oídos

Una vez más gracias a quienes me ayudaron ayer, se los agradezco en verdad.

 

daño.PNG

Share this post


Link to post
Share on other sites

Al ejecutar el juego puedes ver en 'tiempo real' el AnimatorController para ver en qué estado te encuentras y puedes modificar los parámetros mientras estás en ejecución....

¿ Lo comprobaste para ver si te da alguna pista ?

  • Like 1

Share this post


Link to post
Share on other sites
4 hours ago, AngelFG said:

Al ejecutar el juego puedes ver en 'tiempo real' el AnimatorController para ver en qué estado te encuentras y puedes modificar los parámetros mientras estás en ejecución....

¿ Lo comprobaste para ver si te da alguna pista ?

las animaciones se ejecutan, al activar el tiempo real puedo ver como el animator va desde "idle" a "run" o "jump" o "attack", incluso puedo ser herido o morir, pero no puedo moverme de mi lugar, estoy atorado en el punto donde inicia y no puedo moverme ni horizontal ni verticalmente, como si el player tuviera un alfiler puesto que no le deja moverse. Solo recupero el movimiento si elimino el PlayerHurt del animator

 

Share this post


Link to post
Share on other sites

Si comentas la línea

anim.SetTrigger("Hurt");

Supongo que te puedes mover ?

Si es así, una opción que se me ocurre es que estés permanentemente ejecutando la animación de Hurt y como es de tipo trigger...

Por eso te comentaba lo de la máquina de estados en ejecución....Si después de PlayerHurt pasas a Player Idle o se mantiene siempre en PlayerHurt....

Share this post


Link to post
Share on other sites
4 hours ago, AngelFG said:

Si comentas la línea


anim.SetTrigger("Hurt");

Supongo que te puedes mover ?

Si es así, una opción que se me ocurre es que estés permanentemente ejecutando la animación de Hurt y como es de tipo trigger...

Por eso te comentaba lo de la máquina de estados en ejecución....Si después de PlayerHurt pasas a Player Idle o se mantiene siempre en PlayerHurt....

Estoy en Idle, no se está ejecutando el hurt siempre, puedo cambiar de run a jump y a attack, las animaciones se ejecutan, los triggers se activan bajo las condiciones correctas. Pero estoy atascado en el punto dentro del mapa donde se situa el player, no puedo avanzar de izquierda u derecha, las animaciones se ejecutan, pero no me puedo desplazar

Share this post


Link to post
Share on other sites

Post #4 sobre los problemas que tengo al momento de desarrollar, hice lo mejor que pude, pero sigo sin descubrir por qué el jugador se queda congelado en el eje horizontal, repasaré mi situación para que entiendan mi predicamento:

-Las animaciones se ejecutan, el atacar, correr, saltar, estar quieto, ser herido y hasta morir. Todo se ejecuta,

-Arranco normalmente, me mantengo en playerIdle, y en tiempo real las animaciones se ejecutan bien

-PROBLEMA: El player se mantiene quieto en su desplazamiento en el eje horizontal, no va a ningún lado, no importa que se ejecuten las animaciones, no va a ningun lugar.

ADICIONAL:

-Ni attack, ni Hurt, ni ningun trigger se mantiene activo al iniciar, si salto el setbool grounded que identifica que estoy sobre el suelo se desactiva y reactiva como debe ser

-Si elimino la animacion playerHurt del animator, entonces recupero la movilidad por completo, puedo atacar saltar y correr como debe ser... pero, no puedo ser herido ni morir, y no quiero eso

Dejaré el código aquí para que lo vean, y me digan si es algo que tiene el script, o si es algo del animator o las animaciones que no entiendo aun.

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

public class PlayerController : MonoBehaviour {

	public bool grounded;
	public float maxSpeed = 5f;
	public float speed = 10f;
	public float jumpPower = 7f;
	public float attackRange = 0.75f;
	public int attackDamage = 20;
	public int maxHealth = 100;
	public int currentHealth;
	public Transform attackPos;
	public LayerMask whatIsEnemies;
	public Animator anim;

	private Rigidbody2D rb2d;
	private float timeBtwAttack;
	private float timeBtAttacks;
	private bool jump;

	void Start() {
		currentHealth = maxHealth;
		rb2d = GetComponent<Rigidbody2D>();
		anim = GetComponent<Animator>();
		timeBtwAttack = 0;
		timeBtAttacks = 1;   
	}

	void Update()  {
		anim.SetFloat("Speed", Mathf.Abs(rb2d.velocity.x));
		anim.SetBool("Grounded", grounded);

		if(Input.GetKeyDown(KeyCode.UpArrow) && grounded){
			jump = true;
		} else {
			jump = false;
		}

		if(timeBtwAttack <= 0)	{

			//puedes atacar
			if(Input.GetKeyDown(KeyCode.Space))
			{
				anim.SetTrigger("Attack");
				timeBtwAttack = timeBtAttacks;
				Collider2D[] hitEnemies = Physics2D.OverlapCircleAll(attackPos.position, attackRange, whatIsEnemies);

				//dañarlos
				foreach(Collider2D enemy in hitEnemies) {
					enemy.GetComponent<EnemyController>().TakeDamage(attackDamage);
				}
			}
		} 
		else 
		{
			timeBtwAttack -= Time.deltaTime;
			}
		}



	void OnDrawGizmosSelected(){
		if (attackPos == null)
			return;
		Gizmos.DrawWireSphere(attackPos.position, attackRange);
	}

	void FixedUpdate(){
		Vector3 fixedVelocity = rb2d.velocity;
		fixedVelocity.x *= 0.75f; 

		if (grounded){
			rb2d.velocity = fixedVelocity;
		}

		float h = Input.GetAxis("Horizontal");

		rb2d.AddForce(Vector2.right * speed * h);

		float limitedSpeed = Mathf.Clamp(rb2d.velocity.x, -maxSpeed, maxSpeed);
		rb2d.velocity = new Vector2(limitedSpeed, rb2d.velocity.y);

		if (h > 0.01f) {
			transform.localScale = new Vector3(1f, 1f, 1f);
		}

		if (h < -0.01f) {
			transform.localScale = new Vector3(-1f, 1f, 1f);
		}

		if (jump){
			rb2d.velocity = new Vector2(rb2d.velocity.x, 0);
			rb2d.AddForce(Vector2.up * jumpPower, ForceMode2D.Impulse);
			jump = false;
			Debug.Log(rb2d.velocity.x);
		}
	}
	void OnBecameInvisible(){
		transform.position = new Vector3(-4,0,0);
	}

	public void TakeDamage(int damage){
		if (currentHealth > 0) {
			anim.SetTrigger("Hurt");
		currentHealth -= damage;
		} 

		if (currentHealth <= 0)  { 
			Die();
		}
	}

	void Die() {
		anim.SetBool("IsDead", true);
	}
}

 

dfrtgh.PNG

Share this post


Link to post
Share on other sites

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...