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:
Menu Button UI
Objeto ir para raycast
[Asset] sendo criada, Hotel Completo(Ainda n esta pronta)
BRASILIAN TRUCK SIMULADOR
[DUVIDA] como melhorar a jogabilidade de um jogo 2D
Formaçao de equipe para jogo de sobrevivencia online
Uno Game with Unity 3D
Skript para atravessar uma area e ir para outra cena já como personagem
RIGIDBODY...
Como muda o shaders da unity
[____ADMINISTRADOR OFFLINE____]
[MODELO 3D] Fita K7 para Uso Comercial
Android Swipe
[TUTORIAL] Unity 5 - Sistema Completo de PORTAS E CHAVES
Resolver Error
[____TÓPICO LIVRE____] FALE O QUE QUISER
Diminuir tamanho do //BUILD// do projeto
Recarregador de arms
Alguém Para Dar Uma Avaliada no Meu Jogo de Terror :)
Tela rosa em jogos
multiplayer
MonoDevelop
[TUTORIAL] Cutscene inicial!
Design de apartamento (interior)
//Script// pressionar botão e destruir objeto não funciona
Objeto ultrapassando Colisor
Stop Animation
Como usar uma animação de uma arma animada na Unity...
Como funciona esse script?!
[Dúvida] Movimentação com touch
Delay e ativar variavel de audio
Text to Speech ou outra sugestão
[RESOLVIDO] Como deixar sempre com dois dígitos
[RESOLVIDO] ERRO NO SISTEMA DE FOME, VIDA, STAMINA ETC... DO MARCOS
[RESOLVIDO] VOID START???
DESLIGAR E LIGAR O CARRO
[RESOLVIDO] Animação
jogo quiz 2D unity 5...
(Dúvida) Objeto receber posição do Raycast.
Personagem em 3ª pessoa
Projeto - IMU, terror de sobrevivência em primeira pessoa (estilo silent hill)
JUMP no estilo Subwey surf
Auxilio para script de Câmera
[TUTORIAL] AI Enemy ( Jogos de terror )
Criar varias funções de mesmo nome em um script
Como Que faço Para Quando Eu Reentrar no game o PlayerPrefs restaurar os dados salvos?
[ASSET] Cama Realista 3D + Download Grátis!
[RESOLVIDO] Meu Script Sumiu!
Como colocar arvores configuradas pelo terrain?
Duvida de camera
Problema de conexão com o fórum
Brasileiros podem usar o Unity ADS?
Desenvolvimento de game PokeGen MS - Vídeo e informações
dúvida com variáveis
Câmera tipo Uncharted
Como verificar se a animação términou no animator
[TUTORIAL] Sistema COMPLETO de câmeras
Iluminação unity 5
Procuro membros para minha Equipe (Programadores, designers, etc)
Galera aki tenho um site com muitos models 3d
COMO COLOCO LANTERNA DE LED NO MEU JOGO DE BUS
DUVIDA SCRIPT DO MARCOS SELEÇÃO DE PERSONAGEM !
SOBRE "IK" INVERSE KINEMATICS
Duvida como instância um game objeto com Raycast
Problema Com Virtual Buttons Help me ;-;
GALERA PRECISO DE MODELADORES ,DESIGNER E PROGAMADORES PARA A MINHA EQUIPE DE UNITY 5
sobre build run no Android
e algum bug??
Ajuda na script
[ajuda] câmera puxada
Duvida de script de controle
Não carrega próxima cena após finalizar cutscene
Duvida de script avançada
[TUTORIAL] Derrubar arvores e dropar madeiras dela
Vocês poderiam avaliar meu jogo para Android? (30mb)
Hoje à(s) 9:39 pm
Hoje à(s) 9:34 pm
Hoje à(s) 9:31 pm
Hoje à(s) 9:26 pm
Hoje à(s) 9:25 pm
Hoje à(s) 9:17 pm
Hoje à(s) 9:16 pm
Hoje à(s) 9:16 pm
Hoje à(s) 9:08 pm
Hoje à(s) 8:21 pm
Hoje à(s) 6:00 pm
Hoje à(s) 4:48 pm
Hoje à(s) 4:08 pm
Hoje à(s) 4:08 pm
Hoje à(s) 3:21 pm
Hoje à(s) 2:22 pm
Hoje à(s) 2:12 pm
Hoje à(s) 1:45 pm
Hoje à(s) 1:23 pm
Hoje à(s) 1:16 pm
Hoje à(s) 1:14 pm
Hoje à(s) 2:31 am
Hoje à(s) 1:38 am
Hoje à(s) 12:07 am
Ontem à(s) 10:23 pm
Ontem à(s) 9:23 pm
Ontem à(s) 8:04 pm
Ontem à(s) 7:56 pm
Ontem à(s) 7:51 pm
Ontem à(s) 7:33 pm
Ontem à(s) 2:53 pm
Ontem à(s) 10:34 am
Ontem à(s) 5:22 am
Qui Jan 19, 2017 10:05 pm
Qui Jan 19, 2017 10:04 pm
Qui Jan 19, 2017 8:24 pm
Qui Jan 19, 2017 3:31 pm
Qui Jan 19, 2017 2:41 pm
Qui Jan 19, 2017 11:02 am
Qui Jan 19, 2017 10:17 am
Qui Jan 19, 2017 9:58 am
Qua Jan 18, 2017 11:04 pm
Qua Jan 18, 2017 10:35 pm
Qua Jan 18, 2017 10:10 pm
Qua Jan 18, 2017 8:27 pm
Qua Jan 18, 2017 8:27 pm
Qua Jan 18, 2017 7:45 pm
Qua Jan 18, 2017 7:21 pm
Qua Jan 18, 2017 5:32 pm
Qua Jan 18, 2017 4:53 pm
Qua Jan 18, 2017 3:58 pm
Qua Jan 18, 2017 3:04 pm
Qua Jan 18, 2017 2:07 pm
Qua Jan 18, 2017 12:59 pm
Qua Jan 18, 2017 12:23 pm
Qua Jan 18, 2017 12:22 pm
Qua Jan 18, 2017 4:58 am
Ter Jan 17, 2017 8:57 pm
Ter Jan 17, 2017 8:17 pm
Ter Jan 17, 2017 6:54 pm
Ter Jan 17, 2017 5:13 pm
Ter Jan 17, 2017 4:33 pm
Ter Jan 17, 2017 1:19 pm
Ter Jan 17, 2017 11:57 am
Ter Jan 17, 2017 10:16 am
Ter Jan 17, 2017 7:54 am
Ter Jan 17, 2017 7:46 am
Seg Jan 16, 2017 9:06 pm
Seg Jan 16, 2017 5:21 pm
Seg Jan 16, 2017 5:12 pm
Seg Jan 16, 2017 5:11 pm
Seg Jan 16, 2017 5:11 pm
Seg Jan 16, 2017 5:10 pm
Seg Jan 16, 2017 5:05 pm
Seg Jan 16, 2017 5:03 pm
TassoCervi
George Lucas Vieira
MateusWTP
Karllus Eduardo
George Lucas Vieira
MateusWTP
weslleyFx
George Lucas Vieira
George Lucas Vieira
lucasfera15
John Rambo
John Rambo
artplayer
Alerson Software
OnofreUnity
joabr
joabr
Callyde Jr
Moa
weslleyFx
JailtonUnity
Alerson Software
Dayzr
LukkaFA
joabr
AndyShow
weslleyFx
weslleyFx
weslleyFx
weslleyFx
GustavoMaster
AndyShow
AndyShow
Joker 22
lucasfera15
GustavoMaster
GustavoMaster
Kenji Haruno
luKkaSs
AndyShow
joabr
poker14k
artplayer
Pedro Canassa Garcia
pablo10544
LegendGames
artplayer
AndyShow
artplayer
weslleyFx
Weverton Borges da Silva
Hardencio
AndyShow
AndyShow
John Rambo
John Rambo
MonsaM
John Rambo
dstaroski
MonsaM
John Rambo
LuizFixa3D
XavezZ
R R
anizioNoob
dstaroski
dstaroski
John Rambo
MarcosSchultz
MarcosSchultz
MarcosSchultz
joabr
MarcosSchultz
MarcosSchultz
marcos4503

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 : 326
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 : 7530
REPUTAÇÃO : 995
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 : 1434
REPUTAÇÃO : 260
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 : 326
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 : 7530
REPUTAÇÃO : 995
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 : 326
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 : 7530
REPUTAÇÃO : 995
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 : 326
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