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 :D
TÓPICOS RECENTES:
Tópico:
Postado em:
Postado por:
Meu personagem parou de andar , sem que eu alterasse ele
Jogo Quiz perguntas aleatórias
Transição de cenas Bug com Scripts
Pintura na tela
Anti Pirataria
Manter a última posic de objetos após sair e voltar de cena
Alguem me ajuda em um script!
Camera
[____TÓPICO LIVRE____] FALE O QUE QUISER (Parte 2)
Erros ao tentar build para android!
Problema com terreno!
Teleporte do player com outro objeto!
Media entre pontos e tempo!
Vídeo player não mostra nada
(Duvida)Sistema de estrelas
Filhos dos filhos
Construção de um save das configurações e ir pro jogo com as config certas
Duvida na hora da POSTAGEM na PLAY STORE
Auto posicionar objeto
Como dar um clique em um determinado botão através de Script
Como faço as personagens causarem dano (e vice-versa)?
Dúvida no uso de loop no Unity
Duvida em Python
Preciso de Programadores, Músicos e Modeladores.
Como usar LOD Group para usar no Mass Place Trees
Como Criar um Sistema de Coop? (Photon)
Fighter camera 3D tekken style, boxing style
Erro no Script- "The script needs to derived from MonoBehavior"
[TUTORIAL] Fixed Joint e Spring Joint - Unity 5
Música Grátis
Not a Dream - Formação de Equipe
Como deixar o código mais dinâmico
Duvida Shader para celular
Ideia para algum jogo
Aplicativo não instalado
Tela cheia em android
duvida de raytracing
[Em Desenvolvimento] Battles of Worlds
[Formação de Equipe] Battles of Worlds
Box Collider 2D Pausando o Jogo.
Como fazer um sistema para conectar objetos?
Jogos Pagos e proteção
[DÚVIDA] sair som do objeto ao pressionar uma tecla
Seleção de personagens sem usar ele como prefab
Duvida Postagem na Play Store
Fazer o player rodar a animação até o final
Ofuscar
Preciso de Ajuda Estou a desenvolver um projeto!
[TUTORIAL] Joystick vistual para mobile
desativa objecto
IDE editor C#
Porque o meu BoxCollider2D não desativa?
Sistema De Skin Na Unity
erro ao abrir projeto na unity 2019.2.0
Jogador Flicando no chão
Mostrar eventos no Inspector
[TUTORIAL] Menu Pause AVANÇADO (Unity 5.3 ou superior)
Algumas Maneiras de Ganhar Dinheiro Com o Blender e Modelagem 3D
[TUTORIAL] Salvar SCORE e substituir caso faça mais pontos.
aplicativo travando
e ai galera to tendo poblema com wheel collider
Shader Editor travando a cada alteração nas propriedades
Tela inteira no Android
Scale Factor de Modelos Faz Diferença Na Performacer do Jogo?
Picos de Queda de FPS!
ERRO NA UNITY, AJUDEM POR FAVOR
Como fazer uma tecla ser pressionado x vezes.
Vamos criar uma comunidade no Discord!
[Projeto em Andamento] Favela Combat - Multiplayer online (Android & iOS)
Como ativar e desativar o Box Collider utilizando o RayCast.
[RESOLVIDO] Player 2D girando ao descer de plataforma
Road Life - Jogo Mundo Aberto RPG
Como parar o spawn aleatório?
[RESOLVIDO] Pêndulo 2D
[RESOLVIDO] Como faço para clicar em um objeto e visualizar, girar...
Crio Ícones Personalizados Para Jogos
Metadados recusados AppleConnect [Screenshots]
Ajuda na criação de um jogo de Xadrez 3D
> Posso achar Bugs facilmente <
Meu Jogo inspirado em resident evil 2 remake
Unity + Photon 2
[RESOLVIDO] tira uma duvida
[TUTORIAL] Campo de visão dos inimigos (Enemy FOV) com Raycast ou OverlapSphere
Contagem de tempo em classes abstratas
Erro ao compilar em webGL
[RESOLVIDO] Animação na Movimentação (Parado, Andar e Correr)
[RESOLVIDO] Parâmetro "Out" não existe (Duvida com Script)
Duvida de movimentação de câmera 2D (Sem personagem)
[RESOLVIDO] Colocando meu jogo para 64 bits
(Animator) Animação bugada no animator!
[TUTORIAL] CONFIGURANDO O UNITY PARA COMPILAR PARA ANDROID
[RESOLVIDO] Porque o Vector2.Distance não está funcionando?
[TRETA BR] GAME QUASE FINALIZADO !
Algumas perguntas sobre cenas e transições
Sistema de "Avaliação" / Probabilidade / Notas
Problema com boxes colliders
Dúvida quando a interferência de uma colisão em um sistema de chute e passe
Bloom no Android
Duvidas ao transformar um GameObjeto em Prefab
Hoje à(s) 4:53 pm
Hoje à(s) 2:59 pm
Hoje à(s) 2:20 pm
Hoje à(s) 10:42 am
Hoje à(s) 7:42 am
Ontem à(s) 3:07 pm
Ter Set 17, 2019 8:22 pm
Ter Set 17, 2019 8:06 pm
Ter Set 17, 2019 4:29 pm
Ter Set 17, 2019 4:10 pm
Ter Set 17, 2019 3:41 pm
Ter Set 17, 2019 1:32 pm
Ter Set 17, 2019 3:01 am
Ter Set 17, 2019 1:30 am
Seg Set 16, 2019 11:03 pm
Seg Set 16, 2019 8:21 pm
Seg Set 16, 2019 5:37 pm
Seg Set 16, 2019 4:07 pm
Seg Set 16, 2019 4:11 am
Seg Set 16, 2019 2:36 am
Seg Set 16, 2019 12:22 am
Dom Set 15, 2019 11:21 pm
Dom Set 15, 2019 8:29 pm
Dom Set 15, 2019 5:52 pm
Dom Set 15, 2019 4:41 pm
Dom Set 15, 2019 3:52 pm
Dom Set 15, 2019 12:42 pm
Dom Set 15, 2019 12:41 pm
Dom Set 15, 2019 11:20 am
Dom Set 15, 2019 1:58 am
Dom Set 15, 2019 12:08 am
Sab Set 14, 2019 8:45 pm
Sab Set 14, 2019 7:55 pm
Sab Set 14, 2019 7:07 pm
Sab Set 14, 2019 7:06 pm
Sab Set 14, 2019 7:05 pm
Sab Set 14, 2019 6:58 pm
Sab Set 14, 2019 5:00 pm
Sab Set 14, 2019 4:57 pm
Sab Set 14, 2019 1:49 pm
Sab Set 14, 2019 12:37 am
Sex Set 13, 2019 10:58 pm
Sex Set 13, 2019 10:42 pm
Sex Set 13, 2019 8:58 pm
Sex Set 13, 2019 8:33 pm
Sex Set 13, 2019 8:28 pm
Sex Set 13, 2019 8:19 pm
Sex Set 13, 2019 8:17 pm
Sex Set 13, 2019 8:08 pm
Sex Set 13, 2019 8:06 pm
Sex Set 13, 2019 8:04 pm
Sex Set 13, 2019 2:40 pm
Sex Set 13, 2019 5:02 am
Sex Set 13, 2019 4:59 am
Sex Set 13, 2019 4:50 am
Sex Set 13, 2019 4:41 am
Sex Set 13, 2019 4:26 am
Sex Set 13, 2019 4:19 am
Sex Set 13, 2019 4:17 am
Sex Set 13, 2019 3:53 am
Sex Set 13, 2019 3:44 am
Sex Set 13, 2019 3:35 am
Sex Set 13, 2019 3:34 am
Sex Set 13, 2019 3:06 am
Sex Set 13, 2019 2:44 am
Sex Set 13, 2019 2:40 am
Sex Set 13, 2019 2:31 am
Qui Set 12, 2019 9:46 pm
Qui Set 12, 2019 9:46 pm
Qui Set 12, 2019 4:43 pm
Qui Set 12, 2019 3:22 pm
Qui Set 12, 2019 2:50 pm
Qua Set 11, 2019 10:05 pm
Qua Set 11, 2019 9:14 pm
Qua Set 11, 2019 1:16 pm
Qua Set 11, 2019 11:58 am
Qua Set 11, 2019 9:03 am
Qua Set 11, 2019 1:45 am
Ter Set 10, 2019 10:52 pm
Ter Set 10, 2019 6:28 pm
Ter Set 10, 2019 10:12 am
Ter Set 10, 2019 12:38 am
Seg Set 09, 2019 10:04 pm
Seg Set 09, 2019 6:08 pm
Seg Set 09, 2019 2:57 pm
Sab Set 07, 2019 7:23 pm
Sab Set 07, 2019 1:14 pm
Sab Set 07, 2019 12:12 pm
Sex Set 06, 2019 9:06 pm
Sex Set 06, 2019 11:44 am
Qui Set 05, 2019 11:30 pm
Qui Set 05, 2019 10:57 pm
Qui Set 05, 2019 6:26 pm
Qua Set 04, 2019 11:38 pm
Qua Set 04, 2019 9:02 pm
Ter Set 03, 2019 4:42 pm
Ter Set 03, 2019 2:52 pm
Ter Set 03, 2019 12:04 pm
Ter Set 03, 2019 10:14 am
mydaegon
MayLeone
MayLeone
Zack2
diegopds
MayLeone
gutovic29
Fagner
MarcosSchultz
Daniel Dória
Fagner
lesgoy
danielPedra90
ffabim
poyser
NKKF
lucaspoiob
gtcmcsgo
MayLeone
lesgoy
Swordsdragon
joffersoju
victorgx22
LardosJogos
tr4ssh
deikson
Josh123
Samuelostgamer
welberpv2022
JohnRambo
LardosJogos
Hamassfall
SteveRogers
LúcioHenrique098
lesgoy
lesgoy
SteveRogers
Dom3000
Dom3000
Newba
henriquegames501
guimaraf
gcs13
garnios
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
NKKF
MayLeone
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
JohnRambo
dkrazor
recagonlei
CyberPh4ntom
NKKF
TecnoGames
Hamassfall
c4stor
Magnatah
numb123
JohnRambo
LardosJogos
RafaelSquid1
billybmx
katymarques
hao3726
MayLeone
Socates
LardosJogos
Newba
SteveRogers
garnios
JohnVitor
garnios
Hamassfall
ruanzikaad
Magnatah
Mancha
SteveRogers
gabrimo
lesgoy
garnios

Histórico de Input

Ir em baixo

DÚVIDA Histórico de Input

Mensagem por NKKF em Sex Mar 29, 2019 6:39 pm

Oi pessoal.

Eu queria fazer com que meu jogador tivesse um "histórico de inputs", porque ele se move à cada 1 clique no WASD e ele faz uma animação que demora uns 0.8 segundos, então se o usuário apertar bem rápido ele esquece alguns movimentos que deveria ter feito (Já que o usuário clicou, por isso o histórico seria necessário).. Alguém tem alguma ideia de como fazer isso?
NKKF
NKKF
ProgramadorMaster

Masculino PONTOS : 2593
REPUTAÇÃO : 478
Idade : 14
Áreas de atuação : Error 404 Not Found.
Respeito as regras : Histórico de Input Aad8pUi

Ver perfil do usuário http://www.projetounity.esy.es

Voltar ao Topo Ir em baixo

DÚVIDA Re: Histórico de Input

Mensagem por luiz12345 em Sex Mar 29, 2019 8:08 pm

acho que você poderia utilizar o Debug.Log(); marcar qual botão foi apertado nele e depois coloca uma data em minuto e segundo.
Ficaria algo assim:
Debug.log("Apertou W " + System.DateTime.Now.Minute +  System.DateTime.Now.Second);
Tente ver se eu n errei nada, pode ter alguma letra maiúscula ou minúscula errada ai.

também você poderia resolver esse problema colocando uma float para dar um tempo de espera, ai quando uma animação estiver ocorrendo ele não pode mais se locomover.
ex:
cria 2 float, uma um tempo, outra um tempo máximo.

cria uma void que pede um tempo máximo, e seta a sua variável tempo máximo para ela e deixa a variável do tempo em 0.

chame esta void nos input de deie +/- o tempo que demroa para executar a animação.

ficaria algo assim:

public float Tempo;
public float TempoMaximo;

void update(){

  if(Tempo >= TempoMaximo){

    if(Input.getkeydown(Keycode.W){
     AnimExecution(0.8f);
 }else{
   Tempo += 1 * Time.deltaTime;
   }
 }
 void AnimExecution(float MaxTime){
   TempoMaximo = MaxTime;
   Tempo = 0;
}
(algumas letras maiúsculas e minúsculas devem estar faltando)


só uma ideia de como fazer este sistema de espera, assim basicamente ele não executará uma nova animação se uma já estiver sendo executada, e neste sistema da para colocar animações que possuem o tempo diferentes umas das outras.
luiz12345
luiz12345
MembroAvançado

Masculino PONTOS : 1375
REPUTAÇÃO : 15
Idade : 18
Áreas de atuação : Programação, Modelagem 3D, Criação De Jogos Digitais.
Respeito as regras : Histórico de Input WvDYdlf

Ver perfil do usuário https://discord.gg/8b8bGyY

Voltar ao Topo Ir em baixo

DÚVIDA Re: Histórico de Input

Mensagem por luiz12345 em Sex Mar 29, 2019 8:10 pm

public float Tempo;
public float TempoMaximo;

void update(){

  if(Tempo >= TempoMaximo){

    if(Input.getkeydown(Keycode.W){
     AnimExecution(0.8f);
     }
   }else{
   Tempo += 1 * Time.deltaTime;
   }
 }
 void AnimExecution(float MaxTime){
   TempoMaximo = MaxTime;
   Tempo = 0;
}


ops.. esqueci um  " } "  ;-;
luiz12345
luiz12345
MembroAvançado

Masculino PONTOS : 1375
REPUTAÇÃO : 15
Idade : 18
Áreas de atuação : Programação, Modelagem 3D, Criação De Jogos Digitais.
Respeito as regras : Histórico de Input WvDYdlf

Ver perfil do usuário https://discord.gg/8b8bGyY

Voltar ao Topo Ir em baixo

DÚVIDA Re: Histórico de Input

Mensagem por NKKF em Sex Mar 29, 2019 11:22 pm

Mas é exatamente o contrário que eu quero fazer: Eu quero que sim, ele siga o que o usuário fez enquanto o "robô" fazia a animação dele.
NKKF
NKKF
ProgramadorMaster

Masculino PONTOS : 2593
REPUTAÇÃO : 478
Idade : 14
Áreas de atuação : Error 404 Not Found.
Respeito as regras : Histórico de Input Aad8pUi

Ver perfil do usuário http://www.projetounity.esy.es

Voltar ao Topo Ir em baixo

DÚVIDA Re: Histórico de Input

Mensagem por MarcosSchultz em Sex Mar 29, 2019 11:58 pm

A parte de armazenamento dos dados da pra fazer com list:



Basta adicionar os inputs nas listas toda vez que alguma 'anyKey' for pressionada
MarcosSchultz
MarcosSchultz
Administrador

Masculino PONTOS : 62325
REPUTAÇÃO : 2353
Idade : 23
Áreas de atuação : Administrador do fórum
Respeito as regras : Histórico de Input Aad8pUi

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

Voltar ao Topo Ir em baixo

DÚVIDA Re: Histórico de Input

Mensagem por NKKF em Sab Mar 30, 2019 12:33 pm

Aproveitando o tópico: como eu faço para que uma tecla se sobreponha à outra? Tipo: eu clico A e B, só que o A eu cliquei primeiro, mas se for em if, ele sempre executará o primeiro IF. Exemplo:

Código:
if (B)
   jsfjiejf;
else if (A)
   igkjrgijk;

Não importa se eu clico primeiro o A, ele sempre executa o B, ignorando o A.


O que eu quero é que o A se sobreponha apenas por eu ter clicado primeiro nele. Mas o mesmo aconteceria caso eu clicasse no B primeiro.
NKKF
NKKF
ProgramadorMaster

Masculino PONTOS : 2593
REPUTAÇÃO : 478
Idade : 14
Áreas de atuação : Error 404 Not Found.
Respeito as regras : Histórico de Input Aad8pUi

Ver perfil do usuário http://www.projetounity.esy.es

Voltar ao Topo Ir em baixo

DÚVIDA Re: Histórico de Input

Mensagem por luiz12345 em Sab Mar 30, 2019 1:17 pm

acho que entendi, tente algo parecido com isto:

public string Prioridade = "Nenhuma";


if(Prioridade == "Nenhuma"){
  if(input.getkeydown(A)){ // utilize o getkeydown.
    Prioridade = "A";
    Return;
    }
  if(input.getkeydown(B)){
    Prioridade = "B";
    Return;
    }
}

if(Prioridade == "A"){
  a coisa que vc quer executar;


  if(Input.getkeyup(A){
    Prioridade = "Nenhuma";
    return;//isto talvez nem seja necessario
    }
}


if(Prioridade == "B"){
  a coisa que vc quer executar;


  if(Input.getkeyup(B){
    Prioridade = "Nenhuma";
    Return;
    }
}
//acho que vc entendeu a ideia





este código seta uma string para a primeira tecla clicada, depois é impossível setar esta string ate ela ser des-clicada, com isto é possível checar um clique por vez.
 acho que era isso que você queria desculpe se eu n tiver entendido.
luiz12345
luiz12345
MembroAvançado

Masculino PONTOS : 1375
REPUTAÇÃO : 15
Idade : 18
Áreas de atuação : Programação, Modelagem 3D, Criação De Jogos Digitais.
Respeito as regras : Histórico de Input WvDYdlf

Ver perfil do usuário https://discord.gg/8b8bGyY

Voltar ao Topo Ir em baixo

DÚVIDA Re: Histórico de Input

Mensagem por Isabela em Sab Mar 30, 2019 11:14 pm

Vamos lá, se entendi bem, você quer poder clicar em várias teclas, e quer que cada ação seja executada na ordem que você apertou, não importa quantas ações ou quanto tempo leve.
Tentei implementar usando List como o @MarcosSchultz recomendou, como eu ainda tô começando na programação, pode haver algo mal otimizado, então aceito sugestões de melhora :3

Código Antigo:

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

public class HistoricoInputs : MonoBehaviour
{
    private List<char> historico;
    private bool trava = false;
    private float tempo = 0;

    private void Start()
    {
        historico = new List<char>();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            AdicionarHistorico('A');
            if (trava == false)
                StartCoroutine(Espera());
        }
        if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            AdicionarHistorico('B');
            if (trava == false)
                StartCoroutine(Espera());
        }
        if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            AdicionarHistorico('C');
            if (trava == false)
                StartCoroutine(Espera());
        }
        if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            AdicionarHistorico('D');
            if (trava == false)
                StartCoroutine(Espera());
        }

    }

    private void AdicionarHistorico(char indexAcao)
    {
        historico.Add(indexAcao);
    }

    private void ExecutarAcaoA()
    {
        tempo = 2;
        //Ação A

    }

    private void ExecutarAcaoB()
    {
        tempo = 3;
        //Ação B
    }

    private void ExecutarAcaoC()
    {
        tempo = 4;
        //Ação C
    }

    private void ExecutarAcaoD()
    {
        tempo = 5;
        //Ação D
    }

    IEnumerator Espera()
    {
        trava = true;
        print("Executando Acao " + historico[0] + "...");
        switch (historico[0])
        {
            case 'A':
                ExecutarAcaoA();
                break;
            case 'B':
                ExecutarAcaoB();
                break;
            case 'C':
                ExecutarAcaoC();
                break;
            case 'D':
                ExecutarAcaoD();
                break;
            default:
                break;
        }
        yield return new WaitForSeconds(tempo);
        print("Acao " + historico[0] + " concluida!\n\n");
        historico.RemoveAt(0);

        if (historico.Count > 0)
        {
            StartCoroutine(Espera());
        }
        else
        {
            trava = false;
        }
    }
}



Basicamente tenho 4 ações (A,B,C,D) que são chamadas respectivamente pelas teclas de seta (Pra cima, pra baixo, direita, esquerda).
Se você apertar mais de uma ação, ela vai aguardar a atual ser executada e só então irá pra próxima...
Achei que seria legal poder personalizar o tempo de cada ação, então se você quiser, basta alterar dentro de cada método "ExecutarAção"
Cheers Boooa Noiteee!

#edit
 
Depois que postei percebi que o tempo permanece o mesmo se houver mais de uma ação a ser executada, Segue abaixo as correções:

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

public class HistoricoInputs : MonoBehaviour
{
    private List<char> historico = new List<char>();
    private bool trava = false;
    private float tempo = 0;
    private float tempoA = 2, tempoB = 3, tempoC = 4, tempoD = 5;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.UpArrow))
            AdicionarHistorico('A');         
        if (Input.GetKeyDown(KeyCode.DownArrow))
            AdicionarHistorico('B');           
        if (Input.GetKeyDown(KeyCode.RightArrow))
            AdicionarHistorico('C');
        if (Input.GetKeyDown(KeyCode.LeftArrow))
            AdicionarHistorico('D');
    }

    private void AdicionarHistorico(char acao)
    {
        historico.Add(acao);
        if (trava == false)
            StartCoroutine(ExecutarAcao());
    }

    private void AcaoA()
    {
        //Ação A       
    }

    private void AcaoB()
    {
        //Ação B
    }

    private void AcaoC()
    {
        //Ação C
    }

    private void AcaoD()
    {
        //Ação D
    }

    IEnumerator ExecutarAcao()
    {
        trava = true;
        print("Executando Acao "+historico[0]+"...");
        if (historico[0] == 'A') {
            AcaoA();
            tempo = tempoA;
        }
        else if (historico[0] == 'B') {
            AcaoB();
            tempo = tempoB;
        }
        else if (historico[0] == 'C') {
            AcaoC();
            tempo = tempoC;
        }
        else if (historico[0] == 'D') {
            AcaoD();
            tempo = tempoD;
        }
        yield return new WaitForSeconds(tempo);
        print("Acao "+ historico[0] +" concluida!");       
        historico.RemoveAt(0);

        if (historico.Count > 0)
            StartCoroutine(ExecutarAcao());
        else
            trava = false;
    }
}


Última edição por Isabela em Dom Mar 31, 2019 11:58 am, editado 5 vez(es)

Isabela
ProgramadorMaster

Feminino PONTOS : 940
REPUTAÇÃO : 255
Idade : 19
Respeito as regras : Histórico de Input Aad8pUi

Ver perfil do usuário

Voltar ao Topo Ir em baixo

DÚVIDA Re: Histórico de Input

Mensagem por Magnatah em Sab Mar 30, 2019 11:19 pm

Spoiler:

@Isabela escreveu:Vamos lá, se entendi bem, você quer poder clicar em várias teclas, e quer que cada ação seja executada na ordem que você apertou, não importa quantas ações ou quanto tempo leve.
Tentei implementar usando List como o @MarcosSchultz recomendou, como eu ainda tô começando na programação, pode haver algo mal otimizado, então aceito sugestões de melhora :3

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

public class HistoricoInputs : MonoBehaviour
{
    private List<char> historico;
    private bool trava = false;
    private float tempo = 0;

    private void Start()
    {
        historico = new List<char>();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            AdicionarHistorico('A');
            if (trava == false)
                StartCoroutine(Espera());
        }
        if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            AdicionarHistorico('B');
            if (trava == false)
                StartCoroutine(Espera());
        }
        if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            AdicionarHistorico('C');
            if (trava == false)
                StartCoroutine(Espera());
        }
        if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            AdicionarHistorico('D');
            if (trava == false)            
                StartCoroutine(Espera());
        }
        
    }

    private void AdicionarHistorico(char indexAcao)
    {
        historico.Add(indexAcao);
    }

    private void ExecutarAcaoA()
    {
        tempo = 2;
        //Ação A
        
    }

    private void ExecutarAcaoB()
    {
        tempo = 3;
        //Ação B
    }

    private void ExecutarAcaoC()
    {
        tempo = 4;
        //Ação C
    }

    private void ExecutarAcaoD()
    {
        tempo = 5;
        //Ação D
    }

    IEnumerator Espera()
    {
        trava = true;
        print("Executando Acao "+historico[0]+"...");
        switch (historico[0])
        {
            case 'A':
                ExecutarAcaoA();
                break;
            case 'B':
                ExecutarAcaoB();
                break;
            case 'C':
                ExecutarAcaoC();
                break;
            case 'D':
                ExecutarAcaoD();
                break;
            default:
                break;
        }
        yield return new WaitForSeconds(tempo);
        print("Acao "+ historico[0] +" concluida!\n\n");        
        historico.RemoveAt(0);

        if (historico.Count > 0)
        {
            StartCoroutine(Espera());
        }
        else
        {
            trava = false;
        }
    }
}

Basicamente tenho 4 ações (A,B,C,D) que são chamadas respectivamente pelas teclas de seta (Pra cima, pra baixo, direita, esquerda).
Se você apertar mais de uma ação, ela vai aguardar a atual ser executada e só então irá pra próxima...
Achei que seria legal poder personalizar o tempo de cada ação, então se você quiser, basta alterar dentro de cada método "ExecutarAção"
:cheers:Boooa Noiteee!

Já To Salvando Esse Script, Pois Assim Que Comecei Na Unity Eu Precisava De Algo Parecido.  Laughing
Magnatah
Magnatah
Instrutor

Masculino PONTOS : 1150
REPUTAÇÃO : 95
Idade : 24
Áreas de atuação : Dєรєиvσlvєdσя Wєb(Fяσит-єиd), Blєиdєя, υиiтy, C#, ρнρ є Jαvαรcяiρт.
Respeito as regras : Histórico de Input Aad8pUi

Ver perfil do usuário https://magnuspage.000webhostapp.com/index.php

Voltar ao Topo Ir em baixo

DÚVIDA Re: Histórico de Input

Mensagem por NotoriousDev em Seg Abr 01, 2019 9:50 am

@NKKF escreveu:Oi pessoal.

Eu queria fazer com que meu jogador tivesse um "histórico de inputs", porque ele se move à cada 1 clique no WASD e ele faz uma animação que demora uns 0.8 segundos, então se o usuário apertar bem rápido ele esquece alguns movimentos que deveria ter feito (Já que o usuário clicou, por isso o histórico seria necessário).. Alguém tem alguma ideia de como fazer isso?
Pode armazenar os botões clicados em uma List, como é o caso que o Marcos disse, e usar o Linq para verificar se ele foi clicado, e se calhar, usar um timer para remover ele da lista para poder repetir o processo novamente.
NotoriousDev
NotoriousDev
Desenvolvedor

Masculino PONTOS : 1537
REPUTAÇÃO : 38
Idade : 24
Áreas de atuação : Programação C#
Respeito as regras : Histórico de Input WvDYdlf

Ver perfil do usuário http://127.0.0.1

Voltar ao Topo Ir em baixo

DÚVIDA Re: Histórico de Input

Mensagem por Weslley em Seg Abr 01, 2019 11:29 am

Fiz algo aqui bem simples!

Código:
//animator
public Animator animator;
//historico de botoes precionados
Queue<KeyCode> m_HistoryInputs = new Queue<KeyCode>();
//tabela de consulta de ações já previamente registradas
private Dictionary<KeyCode, Action> m_LookupTable = new Dictionary<KeyCode, Action>();
//proxima acão
private bool m_Next;

private void Start()
{
    //adicionado ações para cada chave
    //a chave é o KeyCode(botão) precionado
    m_LookupTable.Add(KeyCode.W, delegate { print("W"); animator.SetTrigger("teste"); });
    m_LookupTable.Add(KeyCode.A, delegate { print("A"); animator.SetTrigger("teste"); });
    m_LookupTable.Add(KeyCode.S, delegate { print("S"); animator.SetTrigger("teste"); });
    m_LookupTable.Add(KeyCode.D, delegate { print("D"); animator.SetTrigger("teste"); });
    m_Next = true;
}

private void Update()
{
    //verificando sé existe ações na fila é sé pode executar a ação
    if (m_HistoryInputs.Any() && m_Next)
    {
        //remove o indice 0 do historico
        //setando o indice 0 em current
        KeyCode current = m_HistoryInputs.Dequeue();

        //verificando sé existe esse botão na tabela
        if (m_LookupTable.ContainsKey(current))
        {
            //verificando sé a ação não é nula
            if (m_LookupTable[current] != null)
                //executando a ação
                m_LookupTable[current].Invoke();

            //esperar a animação acabar
            StartCoroutine(OnCompleteAnimation());
        }
    }
}

/// <summary>
/// Setar m_Next = true quando a animação atual acabar
/// </summary>
/// <returns>WaitForSeconds</returns>
IEnumerator OnCompleteAnimation()
{
    //proxima ação
    m_Next = false;

    if (animator != null)
    {
        //esperar o tempo da animação atual!
        yield return new WaitForSeconds(animator.GetCurrentAnimatorStateInfo(0).length);
        //proxima ação
        m_Next = true;
    }
    else
        //proxima ação
        m_Next = true;
}

void OnGUI()
{
    //verificando sé o botão precionadado e do teclado e se é KeyDown
    if (Event.current.isKey && Event.current.type == EventType.KeyDown)
    {
        //pegando o botão precionado
        KeyCode current = Event.current.keyCode;
        //verificando sé existe esse botão na tabela
        if (m_LookupTable.ContainsKey(current))
            //adicionado o botão na fila
            m_HistoryInputs.Enqueue(current);
    }
}
Weslley
Weslley
Moderador

Masculino PONTOS : 3605
REPUTAÇÃO : 669
Idade : 21
Áreas de atuação : https://weslleyfx.itch.io/
https://play.google.com/store/apps/dev?id=4937415175307699867
https://www
Respeito as regras : Histórico de Input Aad8pUi

Ver perfil do usuário

Voltar ao Topo Ir em baixo

DÚVIDA Re: Histórico de Input

Mensagem por NKKF em Seg Abr 01, 2019 4:00 pm

Opa, tudo bem? Então, quando eu disse animação, não é o Animator que a própria unity usa, o meu objeto só faz uma simples rotação (O que eu chamo de rotação, eu acho, que é assim que diz, né?). E então, como eu faço desse jetio?

Valeu pelas respostas pessoal, e desculpe-me pela má explicação..
NKKF
NKKF
ProgramadorMaster

Masculino PONTOS : 2593
REPUTAÇÃO : 478
Idade : 14
Áreas de atuação : Error 404 Not Found.
Respeito as regras : Histórico de Input Aad8pUi

Ver perfil do usuário http://www.projetounity.esy.es

Voltar ao Topo Ir em baixo

Voltar ao Topo

- Tópicos similares

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