[Duvida] Inimigo parar de empurrar o outro.
2 participantes
Página 1 de 1
[Duvida] Inimigo parar de empurrar o outro.
Olá, estou desenvolvendo um jogo 2D para android, e fiz os spawns dos inimigos, só que quando o inimigo da frente para pra bater no Player, os de trás não param de andar e ficam empurrando uns aos outros, coloquei um colisor na frente do inimigo e fiz um script para quando o colisor bater na tag Enemy, eles mudarem de animação, eles mudam a animação, porem eles continuam se movimentando pra frente, alguém sabe como faz eles pararem quando colidirem? Desde já agradeço.
Print:
" />
Script do Inimigo:
Script do detector:
Print:
" />
Script do Inimigo:
- Código:
using UnityEngine;
using System.Collections;
public enum ENEMY_STATES{
WALK,
ATTACK,
STUN,
DEAD
}
public class SimpleEnemyBehaviour : LifeBase {
public float speed;
public float attackDamage;
public float timeToRecoverStun;
public Animator enemyAnimator;
public float distanceToAttack;
public float timeToRemoveEnemy;
private float currentTimeToRemoveEnemy;
private float currentTimeToRecoverStun;
private bool inStun;
private ENEMY_STATES currentState;
private PlayerBehaviour player;
// Use this for initialization
void Start () {
base.Start ();
ChangeState (ENEMY_STATES.WALK);
player = FindObjectOfType (typeof(PlayerBehaviour)) as PlayerBehaviour;
}
// Update is called once per frame
void Update () {
switch (currentState) {
case ENEMY_STATES.WALK:{
transform.Translate(Vector3.left * speed * Time.deltaTime);
float currentDistanceToPlayer = Vector3.Distance(transform.position, player.transform.position);
if(currentDistanceToPlayer < distanceToAttack){
ChangeState(ENEMY_STATES.ATTACK);
enemyAnimator.SetBool("InAttack", true);
}
}
break;
case ENEMY_STATES.ATTACK:{
float currentDistanceToPlayer = Vector3.Distance(transform.position, player.transform.position);
if(currentDistanceToPlayer > distanceToAttack){
ChangeState(ENEMY_STATES.WALK);
enemyAnimator.SetBool("InAttack", false);
}
}
break;
case ENEMY_STATES.STUN:{
enemyAnimator.SetBool("InAttack", false);
currentTimeToRecoverStun += Time.deltaTime;
if(currentTimeToRecoverStun > timeToRecoverStun){
ChangeState(ENEMY_STATES.WALK);
currentTimeToRecoverStun = 0;
}
}
break;
case ENEMY_STATES.DEAD:{
currentTimeToRemoveEnemy += Time.deltaTime;
if(currentTimeToRemoveEnemy > timeToRemoveEnemy){
Destroy(gameObject);
}
}
break;
}
}
private void ChangeState (ENEMY_STATES newState) {
currentState = newState;
}
protected override void OnDamage ()
{
ChangeState (ENEMY_STATES.STUN);
enemyAnimator.SetTrigger ("hit");
}
protected override void OnDestroy ()
{
ChangeState (ENEMY_STATES.DEAD);
if(enemyAnimator != null && enemyAnimator.enabled)
enemyAnimator.SetTrigger ("die");
GetComponent<Rigidbody2D> ().gravityScale = 0;
}
}
Script do detector:
- Código:
using UnityEngine;
using System.Collections;
public class EnemyDetector : MonoBehaviour {
public SimpleEnemyBehaviour ally;
private float speed = 0f;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void OnTriggerEnter2D(Collider2D other) {
if (other.tag == "Enemy") {
ally.enemyAnimator.SetTrigger ("hit"); //ANIMAÇAO EXEMPLO
}
}
}
ismarspn- Programador
- PONTOS : 3999
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Re: [Duvida] Inimigo parar de empurrar o outro.
O problema está aqui:
O estado dele ainda permanece em "WALK" então eles ainda se movem...
Você pode criar um novo estado "PARADO" e colocar neste estado apenas animações para ficar parado, e chamar este estado toda vez que colidir com a tag "Enemy"
- Código:
case ENEMY_STATES.WALK:{
transform.Translate(Vector3.left * speed * Time.deltaTime);
float currentDistanceToPlayer = Vector3.Distance(transform.position, player.transform.position);
if(currentDistanceToPlayer < distanceToAttack){
ChangeState(ENEMY_STATES.ATTACK);
enemyAnimator.SetBool("InAttack", true);
}
}
O estado dele ainda permanece em "WALK" então eles ainda se movem...
Você pode criar um novo estado "PARADO" e colocar neste estado apenas animações para ficar parado, e chamar este estado toda vez que colidir com a tag "Enemy"
Re: [Duvida] Inimigo parar de empurrar o outro.
Funcionou aqui, Marcos, obrigado!
ismarspn- Programador
- PONTOS : 3999
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Tópicos semelhantes
» Duvida com inimigo
» (DUVIDA) Empurrar caixas estilo Resident Evil
» [Duvida]Como fazer um objeto Filho de outro
» Após um inimigo morrer, o outro surgir a partir de uma array
» queria aprender a fazer O inimigo subir uma parede (pular pro outro lado)
» (DUVIDA) Empurrar caixas estilo Resident Evil
» [Duvida]Como fazer um objeto Filho de outro
» Após um inimigo morrer, o outro surgir a partir de uma array
» queria aprender a fazer O inimigo subir uma parede (pular pro outro lado)
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos