Jump to content

Alexcloud

Registrados
  • Content Count

    15
  • Joined

  • Last visited

Community Reputation

2 Neutral

About Alexcloud

  • Rank
    Iniciado

Profile Information

  • Especialidad
    Artista

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. sigo esperando ayuda gente u.u, agradeceria alguien me ayude a emplear un buen codigo knockback para avanzar con el desarrollo de mi juego qnq
  2. Gracias, logré resolver lo del set parent, ahora tengo un problema que no consigo resolver, el knockback tras impacto de los box collider, tanto al atacar al enemy como el enemy al impactar con el player, que tipo de script podría funcionar en este caso, busco un retroceso que empuje al objetivo hacia atrás y un poco arriba, como en los mugen al recibir un impacto del sprite enemigo. ya cree el script para el knockback, y he probado diversos codigos, pero ninguno me responder como busco, alguna sugerencia o tutorial que coincida con este tipo de escenario?
  3. siendo honesto los artículos matemáticos no me sirvieron en casi nada ._. aun así, conseguí arreglarlo y hacer que el enemigo gire y siga al player sin importar a donde vaya, lo que sigue ahora es un poco mas sencillo, he hecho las barras de vida del player y el enemigo, funcionan bien, pero para el enemigo busco que la barra de vida este justo encima del enemigo en todo momento, que se mantenga estático sobre el enemigo hasta que este sea destruido para ambas desaparecer. No sé si esto requerirá código o hay una función en Unity que me permita enlazar la barra de vida al enemigo con respecto a su posición, alguien puede darme algún consejo? Adjunto una imagen para que entiendan de que hablo
  4. Buenas, no pude resolver nada sobre el retroceso o Knockback tras el ataque, asi que pasé a otro aspecto, que era el seguimiento del enemigo, hice un nuevo scripts llamado follow player, y como se espera, El enemigo sigue al player, pero quiero que cuando el player este a la izquierda o a la derecha del enemigo, este gire horizontalmente, para que se vea esteticamente bien y no que el enemigo siga al player de espaldas. Dejo adjunto el codigo que estoy empleando para el seguimiento, he visto muchos ejemplos y tutoriales donde se emplea el transform.rotation, pero no sé como aplicarlo correctamente a mi caso, siendo el mio un juego 2D de saltos y plataforma de izquierda a derecha sin profundidad. Adjunto el codigo aqui: using System.Collections; using System.Collections.Generic; using UnityEngine; public class FollowPlayer : MonoBehaviour { public float speed = 0.5f; public Transform Player; // Use this for initialization void Start () { } // Update is called once per frame void Update () { Vector3 displacement = Player.position -transform.position; displacement = displacement.normalized; if (Vector2.Distance (Player.position, transform.position) > 1.0f) { transform.position += (displacement * speed * Time.deltaTime); }else{ //do whatever the enemy has to do with the player } } }
  5. 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); } }
  6. 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
  7. 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
  8. 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.
  9. 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
  10. 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; } }
  11. 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? también si no es mucha molestia, agradecería algo de asistencia, si me puedes ayudar te lo agradeceré un monton
  12. 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
  13. 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); } }
  14. Hola otra vez, como veran soy nuevo y ya hice mi post de presentación, aqui dejo unas capturas para que puedan visualizar los puntajes de algunos de mis fans que hicieron su mejor esfuerzo en la BETA que desarrollé, espero algunos me ayuden pronto a desarrollar la versión de TIAW que tanto quiero lograr hacer.
UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...