SchultzGames
Para tirar dúvidas, crie um tópico especifico na área "Dúvidas em Geral" e aguarde ser respondido. Evite comentar em tópicos não relacionados a sua dúvida Very Happy
TÓPICOS RECENTES:
Tópico:
Postado em:
Postado por:
Qual asset comprar?
Ideias para level design 3D
Preciso saber o ponto medio entre dois Transform
[____TÓPICO LIVRE____] FALE O QUE QUISER
Duvida Animation Play não faz nada
[TUTORIAL] Menu Pause AVANÇADO (Unity 5.3 ou superior)
Alien Planet - Atmospheric scattering test
Unity 5 Bugado
Integração PHP e Unity
Ideia Inovadora
Escolher que resoluções jogo vai ter
como usar o Lookat com o addforce do rigidibody?
[MagicaVoxel] Programa de modelagem de cenários cúbicos fácil
[TUTORIAL] DANO POR QUEDA e BARRA DE VIDA CONTÍNUA no mesmo script
Pra que serve o [SerializeField] e por que usar ele?
Animacao2D
script
Forma uma equipe
Baixar Documentaçao Unity 3D?
Feixe de luz - melhor forma de fazer
erro sinistro
Duvida sobre o Peso do jogo?
Alquem tem alguma ideia de como fazer o Player tipo a cabeça olhar para o seu inimigo?
Cryengine 3?
Como mudar rotacao de um objeto em relacao a posicao do outro objeto
Gostaria da opinião de vocês sobre o beta da Unity
Script
[TUTORIAL] Barra de VIDA / HP contínua
[TUTORIAL] Sistema de Escada Estilo FPS
[TUTORIAL] Melhorar a estabilidade dos veículos com Wheel Collider
Guitar The Legends of Brazil
[TUTORIAL] Escolher a quantos FPS (fixos) o seu jogo deverá rodar.
Examinar
Formação de Equipe Battle of Worlds
me ajudem neste script para subir escada
Texturas
script por favor me ajudem
Números aleatorios
Tem como saber o Tamanho do Objeto?
Banco de dados Aleatorio
Procuro desenhista para jogo 2D Pixel Art (Compra)
[Dúvida] Blender erro ao aplicar osso na mesh
[resolvido]enfiar float no UItext por script
Daria para pegar as horas do computador e por no jogo?
Gerador de Characters Autodesk Online
[JOGO DE FPS MULTIPLAYER] Alguém que saiba fazer animações na Unity 5 ou no blender :D
[LANÇADO] The Dilma
Inventario
Procuro vagas em equipes [Programador]
The Dilma - O terror da Petrobrás
Ajuda Neste Script?
Teste de usuário para um jogo
Procuro Equipe de Jogos 2D
Animações de sobra
[TUTORIAL]Singleton, A melhor forma de acessar a classe!
[TUTORIAL] Sistema de fome, sede, barra de vida, barra de estamina, itens e dano por queda
Mudança de FPS afetam a velocidade das coisas
[TUTORIAL] Sistema de tiro com RAYCAST (várias armas, mira laser, munição, dano, etc, etc)
Como criar um ranking online na Unity usando a PlayFab e o Facebook?
Problema da Conta do comerciante do developer
BUG DE VOLUME NO SCRIPT MENU DE PAUSA
controle 2D com touch ou clique do mouse
[Dúvida] MySQL. Funciona apenas no editor.
[RESOLVIDO]como acesar uma void publica pelo script e ativa-la
Active UI
Como Criar Textura De Armas
Formaçao De Equipe (FLAMEBLOOD)
Fonte Proporcional
Ativar / Desativar Varios GameObject
[Duvida] Como fazer Medkit
[RESOLVIDO]Duvida com butao UI para ativar Void
Rodando o Sul
Procuro programadores para meu projeto BR Bus
Sistema de score
Strings e quebra de texto?
Hoje à(s) 2:02 am
Ontem à(s) 10:52 pm
Ontem à(s) 10:46 pm
Ontem à(s) 10:29 pm
Ontem à(s) 10:01 pm
Ontem à(s) 6:37 pm
Ontem à(s) 6:33 pm
Ontem à(s) 7:16 am
Ontem à(s) 5:46 am
Ontem à(s) 3:34 am
Sab Dez 03, 2016 11:55 pm
Sab Dez 03, 2016 11:46 pm
Sab Dez 03, 2016 11:46 pm
Sab Dez 03, 2016 11:36 pm
Sab Dez 03, 2016 11:31 pm
Sab Dez 03, 2016 11:30 pm
Sab Dez 03, 2016 11:11 pm
Sab Dez 03, 2016 1:32 pm
Sab Dez 03, 2016 12:01 pm
Sab Dez 03, 2016 10:53 am
Sab Dez 03, 2016 1:25 am
Sab Dez 03, 2016 1:11 am
Sab Dez 03, 2016 1:08 am
Sex Dez 02, 2016 11:59 pm
Sex Dez 02, 2016 11:20 pm
Sex Dez 02, 2016 11:15 pm
Sex Dez 02, 2016 11:10 pm
Sex Dez 02, 2016 11:09 pm
Sex Dez 02, 2016 11:08 pm
Sex Dez 02, 2016 11:02 pm
Sex Dez 02, 2016 10:58 pm
Sex Dez 02, 2016 10:52 pm
Sex Dez 02, 2016 10:50 pm
Sex Dez 02, 2016 10:04 pm
Sex Dez 02, 2016 9:12 pm
Sex Dez 02, 2016 8:53 pm
Sex Dez 02, 2016 8:49 pm
Sex Dez 02, 2016 3:14 pm
Sex Dez 02, 2016 12:46 pm
Sex Dez 02, 2016 11:53 am
Sex Dez 02, 2016 8:06 am
Qui Dez 01, 2016 11:31 pm
Qui Dez 01, 2016 10:46 pm
Qui Dez 01, 2016 7:28 pm
Qui Dez 01, 2016 6:42 pm
Qui Dez 01, 2016 5:08 pm
Qui Dez 01, 2016 5:06 pm
Qui Dez 01, 2016 4:44 pm
Qua Nov 30, 2016 11:46 pm
Qua Nov 30, 2016 11:45 pm
Qua Nov 30, 2016 11:19 pm
Ter Nov 29, 2016 8:03 pm
Ter Nov 29, 2016 7:49 pm
Ter Nov 29, 2016 12:15 pm
Ter Nov 29, 2016 10:46 am
Ter Nov 29, 2016 10:13 am
Ter Nov 29, 2016 10:08 am
Ter Nov 29, 2016 6:32 am
Ter Nov 29, 2016 6:29 am
Ter Nov 29, 2016 3:13 am
Ter Nov 29, 2016 2:51 am
Ter Nov 29, 2016 2:47 am
Ter Nov 29, 2016 2:45 am
Ter Nov 29, 2016 1:42 am
Ter Nov 29, 2016 12:44 am
Ter Nov 29, 2016 12:24 am
Seg Nov 28, 2016 10:38 pm
Seg Nov 28, 2016 10:03 pm
Seg Nov 28, 2016 10:00 pm
Seg Nov 28, 2016 6:33 pm
Seg Nov 28, 2016 5:32 pm
Seg Nov 28, 2016 5:22 pm
Seg Nov 28, 2016 3:57 pm
Seg Nov 28, 2016 3:38 pm
Seg Nov 28, 2016 1:29 pm
ygor18
Madness
Dom3000
MarcosSchultz
vinilucas
weslleyFx
weslleyFx
AndyShow
artplayer
Madness
Marc7
Dom3000
ismarspn
weslleyFx
weslleyFx
weslleyFx
weslleyFx
mafipt
dimmuo
dimmuo
Dom3000
Dom3000
Dom3000
Callyde Jr
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
Dom3000
edumoran
dstaroski
dstaroski
Manawydan
Dom3000
artplayer
mlmattos
rafaelllsd
weslleyFx
Extreme Craft
Édipo
weslleyFx
weslleyFx
weslleyFx
weslleyFx
weslleyFx
weslleyFx
mayokota
weslleyFx
artplayer
dimmuo
Hardencio
Hardencio
Callyde Jr
Callyde Jr
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
Extreme Craft
kalielson
kalielson
artplayer
leandroinforware
leandroinforware
John Rambo
Extreme Craft
WesleyLemosLeal
Kelvyn_Feitosa
Weverton Borges da Silva
leandroinforware

TimeAttack

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

DÚVIDA TimeAttack

Mensagem por willianroma em Ter Jul 05, 2016 2:12 pm

Eu utilizo o IEnumerator para fazer a transição de ataque para o "time ataque" ou existe uma maneira mais eficiente de fazer isso?


Parte do Script do inimigo que estou me debatendo pra tentar arrumar:

Spoiler:

Código:
using UnityEngine;
using System.Collections;

public enum ENEMY_STATES{

   WALK,
   ATTACK,
   TIME_ATTACK,
   DIE
}

public class EnemyBehaviour : LifeBase {

   public Animator enemyAnimator;
   public Rigidbody2D enemyRigid;

   public float speed;
   private Vector3 positionRightEnemy;
   private Vector3 positionLeftEnemy;
   private bool lookToRightEnemy = true;
   public float attackDamage;

   public float distanceToAttack;

   public bool timeAttackTrue;

   private ENEMY_STATES currentState;

   private TutoBehaviour player;

   void Start () {
      base.Start ();

      ChangeState (ENEMY_STATES.WALK);

      player = FindObjectOfType (typeof(TutoBehaviour)) as TutoBehaviour;

      positionRightEnemy = enemyAnimator.transform.localScale;
      positionLeftEnemy = positionRightEnemy;
      positionLeftEnemy.x *= -1;

   }
   
   // Update is called once per frame
   void Update () {
      base.Update ();

      if(enemyRigid.velocity.x > 0)
      {
         lookToRightEnemy = true;
      }
      if(enemyRigid.velocity.x < 0)
      {
         lookToRightEnemy = false;
      }

      if(lookToRightEnemy)
      {
         transform.localScale = positionRightEnemy;
      }
      else
      {
         transform.localScale = positionLeftEnemy;
      }

      switch (currentState) {
         case ENEMY_STATES.WALK:{
            
            transform.Translate (Vector3.left * speed * Time.deltaTime);
            lookToRightEnemy = false;
            float currentDistanceToPlayer = Vector3.Distance (transform.position, player.transform.position);//mov
            //muda de movimentação para attack
            if (currentDistanceToPlayer < distanceToAttack) {
               ChangeState (ENEMY_STATES.ATTACK);
               enemyAnimator.SetBool ("AttackEnemy", true);//animação on
            }

            break;
         }
         case ENEMY_STATES.ATTACK:{
            float currentDistanceToPlayer = Vector3.Distance (transform.position, player.transform.position);//movimentação
            player.GetComponent<LifeBase>().ApplyDamage(attackDamage);
            //mudar de attack para movimentação
            if (currentDistanceToPlayer > distanceToAttack) {
               ChangeState (ENEMY_STATES.WALK);
               enemyAnimator.SetBool ("AttackEnemy", false);//animação off
               enemyAnimator.SetBool ("TimeAttack", false);
            } else {

               if (currentDistanceToPlayer < distanceToAttack && timeAttackTrue == false) {

                  StartCoroutine ("TimeAttack");
               }
               if (timeAttackTrue == true) {
                  enemyAnimator.SetBool ("TimeAttack", true);
                  enemyAnimator.SetBool ("AttackEnemy", false);
                  ChangeState (ENEMY_STATES.TIME_ATTACK);
               }
            
            }
            break;
         }
         case ENEMY_STATES.TIME_ATTACK:{
            float currentDistanceToPlayer = Vector3.Distance (transform.position, player.transform.position);//movimentação

            //mudar de attack para movimentação
            if (currentDistanceToPlayer > distanceToAttack) {
               ChangeState (ENEMY_STATES.WALK);
               enemyAnimator.SetBool ("AttackEnemy", false);//animação off
               enemyAnimator.SetBool ("TimeAttack", false);
            }


            if (currentDistanceToPlayer < distanceToAttack && timeAttackTrue == true) {
               
               StartCoroutine ("ReturAttack");
            }
            if (timeAttackTrue == false) {
               enemyAnimator.SetBool ("AttackEnemy", true);
               enemyAnimator.SetBool ("TimeAttack", false);
               ChangeState (ENEMY_STATES.ATTACK);
            }

            break;
         }
         case ENEMY_STATES.DIE:{

            break;
         }
      }

   }


   IEnumerator TimeAttack () {
      Debug.Log ("inicia");

      yield return new WaitForSeconds (0.1f);
      timeAttackTrue = true;

   }   

   IEnumerator ReturAttack () {
      Debug.Log ("volta");

      yield return new WaitForSeconds (1.5f);
      timeAttackTrue = false;





   }

   private void ChangeState (ENEMY_STATES newState){
      currentState = newState;
   }

   protected override void OnDamage () {
      
   }
   protected override void OnDestroyIt () {
      Destroy (gameObject);
   }

}



Estou tentando usa o IEnumerator pra controlar a transação de "attack" para "timeAttack" mas quando dou play, funciona somente na primeira vez (creio eu), ele da o time certinho mas quando ele repete o processo ele não respeita o 1.5 segundos que determinei no IEnumerator.

simplificando: quero dar um tempo do "timeAttack" para o "attack".


Última edição por willianroma em Ter Jul 05, 2016 4:49 pm, editado 1 vez(es)

willianroma
Avançado
Avançado

PONTOS : 279
REPUTAÇÃO : 0
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

DÚVIDA Re: TimeAttack

Mensagem por MarcosSchultz em Ter Jul 05, 2016 4:33 pm

Tem como postar o script todo para fins de teste?

MarcosSchultz
Administrador

Masculino PONTOS : 7134
REPUTAÇÃO : 878
Idade : 20
Áreas de atuação : Administrador do fórum
Respeito as regras :

Ver perfil do usuário http://www.schultzgames.com

Voltar ao Topo Ir em baixo

DÚVIDA Re: TimeAttack

Mensagem por John Rambo em Ter Jul 05, 2016 4:47 pm

Tente usar Time.deltatime

John Rambo
Moderador

Masculino PONTOS : 1287
REPUTAÇÃO : 225
Idade : 17
Áreas de atuação :
Unity;
Programação;
Modelagem;
Criação de cenários;
Sonorização;

Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

DÚVIDA Re: TimeAttack

Mensagem por willianroma em Ter Jul 05, 2016 4:50 pm

MarcosSchultz escreveu:Tem como postar o script todo para fins de teste?
pronto, editei o codigo, ta inteiro agora

willianroma
Avançado
Avançado

PONTOS : 279
REPUTAÇÃO : 0
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

DÚVIDA Re: TimeAttack

Mensagem por MarcosSchultz em Ter Jul 05, 2016 11:49 pm

Tem como postar o script "LifeBase" também? precisamos dele, por que este script atual herda as características do script LifeBase

MarcosSchultz
Administrador

Masculino PONTOS : 7134
REPUTAÇÃO : 878
Idade : 20
Áreas de atuação : Administrador do fórum
Respeito as regras :

Ver perfil do usuário http://www.schultzgames.com

Voltar ao Topo Ir em baixo

DÚVIDA Re: TimeAttack

Mensagem por willianroma em Qua Jul 06, 2016 12:38 am

MarcosSchultz escreveu:Tem como postar o script "LifeBase" também? precisamos dele, por que este script atual herda as características do script LifeBase
Imaginei que ia precisar quando tava revisando o script 

Spoiler:

Código:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public abstract class LifeBase : MonoBehaviour {

   public Slider lifeBar;

   private float currentLife;




   protected void Start () {

      currentLife = lifeBar.maxValue;

   }
   

   protected void Update () {
   
      lifeBar.value = currentLife;

   }

   public void ApplyDamage (float damage) {
      currentLife -= damage;
      OnDamage ();

      if (currentLife < 0.1f) {
         OnDestroyIt ();
      }
   }

   protected abstract void OnDamage ();
   protected abstract void OnDestroyIt ();
}



willianroma
Avançado
Avançado

PONTOS : 279
REPUTAÇÃO : 0
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

DÚVIDA Re: TimeAttack

Mensagem por MarcosSchultz em Sex Jul 08, 2016 12:45 am

kkkkkk, ainda vou precisar do script "TutoBehaviour"

Mas eu estava reparando nesta rotina:

Código:
IEnumerator TimeAttack () {
   Debug.Log ("inicia");
   yield return new WaitForSeconds (0.1f);
   timeAttackTrue = true;

Ela que da o tempo para a variável "timeAttackTrue" ficar verdadeira e liberar o resto das rotinas, mas o tempo dela é só 0.1

MarcosSchultz
Administrador

Masculino PONTOS : 7134
REPUTAÇÃO : 878
Idade : 20
Áreas de atuação : Administrador do fórum
Respeito as regras :

Ver perfil do usuário http://www.schultzgames.com

Voltar ao Topo Ir em baixo

DÚVIDA Re: TimeAttack

Mensagem por willianroma em Sex Jul 08, 2016 10:42 am

Coloquei 0.1s pra ser o atk, assim o player só recebe 1 hit. Mas pelo que tava vendo aqui, acho que estou usando errado o "IEnumerator" ou algo assim pq ele não respeita o tempo do segundo "IEnumerator" que criei pra poder volta a atacar (ReturAttack), ele buga e o 1.5s que determinei é ignorado, algo assim.

ta bem bagunçado o codigo do "TutoBehaviour", preciso apagar algumas linhas de códigos que não estão servindo pra nada kkk
Spoiler:

Código:
using System.Collections.Generic;
using System.Collections;

public class TutoBehaviour : MonoBehaviour {

 private Rigidbody2D tutoRigid;
 private Animator tutoAnimator;

 public float tutoSpeedX;
 public float maxTutoSpeed;
 public float tutoJump;
 private bool lookToRight = true;
 private Vector3 positionRight;
 private Vector3 positionLeft;

 public Transform posicao1;
 public Transform posicao2;
 public bool chao;

 private GameObject enemy;


 //dano
 public float damage;
 public float distanceAttack;
 public bool cooldown;

 //public List<SpellsBase> magics;
 //public int currentMagic;
 //public float currentCooldownTime;


 void Start () {
 tutoRigid = GetComponent<Rigidbody2D> ();
 tutoAnimator = GetComponent<Animator> ();


 positionRight = tutoAnimator.transform.localScale;
 positionLeft = positionRight;
 positionLeft.x *= -1;


 //enemy = FindObjectOfType (typeof(Enemy)) as Enemy;

 cooldown = true;
 }
 

 void Update () {
 
 Vector2 tutoDirecao = new Vector2 (Input.GetAxis ("Horizontal") * tutoSpeedX * Time.deltaTime, 0);

 enemy = GameObject.FindWithTag ("Enemy");
 //codigo para movimentaçao
 tutoRigid.velocity = new Vector2 (tutoDirecao.x, tutoRigid.velocity.y);


 if (tutoRigid.velocity.x > maxTutoSpeed) {
 tutoRigid.velocity = new Vector2 (maxTutoSpeed, tutoRigid.velocity.y);
 }

 if (tutoRigid.velocity.x < -maxTutoSpeed) {
 tutoRigid.velocity = new Vector2 (-maxTutoSpeed, tutoRigid.velocity.y);
 }

 //codigo para animaçao enquanto se movimenta
 tutoAnimator.SetFloat ("Walk", Mathf.Abs (tutoDirecao.x));

 //codigo para olhar para traz
 if (tutoDirecao.x > 0) {
 lookToRight = true;
 }
 if (tutoDirecao.x < 0) {
 lookToRight = false;
 }

 if (lookToRight) {
 transform.localScale = positionRight;
 } else {
 transform.localScale = positionLeft;
 }

 Raycast ();

 Jump ();

 //Attack ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 //posição do inimigo
 // float enemyDistance = Vector2.Distance (enemy.transform.position, transform.position);

 if (cooldown == true) {
 
 if (Input.GetKeyDown (KeyCode.K) /*&& currentCooldownTime > magics [currentMagic].cooldownTime*/) {

 tutoAnimator.SetBool ("Attack", true);
 StartCoroutine ("TimeAttack");
 if (Vector2.Distance (transform.position, enemy.transform.position) < distanceAttack) {
 if (enemy.gameObject.activeInHierarchy) {
 enemy.GetComponent<LifeBase> ().ApplyDamage (damage);
 }
 }
 } else {
 tutoAnimator.SetBool ("Attack", false);

 }
 }


 /*if (magics [currentMagic].canUseMagic) {

 GameObject tempMagic = Instantiate (magics [currentMagic].gameObject, transform.position, transform.rotation) as GameObject;
 tempMagic.GetComponent<SpellsBase> ().SetDirection (lookToRight);
 currentCooldownTime = 0;

 tutoAnimator.SetBool ("Attack", true);
 } else {
 tutoAnimator.SetBool ("Attack", false);
 }

 }
 currentCooldownTime += Time.deltaTime;
*/
 }
 //Attack ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


 void Jump()
 {
 if(chao == true)
 {
 tutoAnimator.SetBool("Jump",false);
 tutoAnimator.SetBool("Fall",false);

 if(Input.GetButtonDown("Jump"))
 {
 tutoRigid.velocity = new Vector2(tutoRigid.velocity.x,tutoJump);
 }
 }
 else
 {
 if(Input.GetButtonUp("Jump") && tutoRigid.velocity.y > 0)
 {
 tutoRigid.velocity = new Vector2 (0,tutoRigid.velocity.y/2); //Para pular conforme aperta espaço
 }
 if(tutoRigid.velocity.y > 0)
 {
 tutoAnimator.SetBool("Jump",true);
 tutoAnimator.SetBool("Fall",false);
 }
 if(tutoRigid.velocity.y < 0)
 {
 tutoAnimator.SetBool("Jump",false);
 tutoAnimator.SetBool("Fall",true);
 }
 if(tutoRigid.velocity.y == 0)
 {
 tutoAnimator.SetBool("Jump",false);
 tutoAnimator.SetBool("Fall",false);
 }
 }

 }

 void Raycast()
 {
 Debug.DrawLine(posicao1.position, posicao2.position, Color.red);

 if(Physics2D.Linecast(posicao1.position, posicao2.position))
 {
 chao = true;
 }
 else
 {
 chao = false;
 }

 }

 void OnTriggerEnter2D(Collider2D enterDoor) {

 if (enterDoor.gameObject.tag == "EnterInTheDoor") {
 GameController.instance.ChangeState (GAME_STATE.NEXT);
 }
 
 }

 IEnumerator TimeAttack() {

 cooldown = true;
 yield return new WaitForSeconds (0.1f);
 cooldown = false;
 yield return new WaitForSeconds (0.4f);
 cooldown = true;
 }

}




willianroma
Avançado
Avançado

PONTOS : 279
REPUTAÇÃO : 0
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum