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:
Playerprefs
Como percorrer por rampas sem deslizar o Rigdbody?
fazer inimigo se movimentar para direita e esquerda jogo de plataforma
hospedagem de site gratis (link no tópico)
Solução Unity 2019 erro Text Mesh Pro
[TUTORIAL] Cena inicial de CARREGAMENTO, creditos, logo, etc [UNITY 5]
Problema com boxes colliders
Rotação
The Stack
Instalar nova versão Unity 2019
[RESOLVIDO] Alguém conhece um programa bom e simples para criar modelos 3d?
[____TÓPICO LIVRE____] FALE O QUE QUISER (Parte 2)
Flamehead MMORPG Indie
Comunicação entre scripts
[RESOLVIDO] Teletransporte pelo cenario Unity2D
Dúvida WEBGL
[RESOLVIDO] Problema com sistema de controle de volume.
Meu Jogo ta Travando - Quiz Unity 2D
[RESOLVIDO] Unity - Como Saber Se Botão Foi Clicado?
Quiz 2D Unity - Como esperar segundos para ir pra próxima pergunta????
Aplicativo!?!
[DUVIDA] ADS Em app WPF.NET ?
[RESOLVIDO] Renderização de Sprite renderer
[TUTORIAL] Arma tipo a do call of duty
Animação customizada com "Exit Time"
Personagem No Unity problema com colisão Como Resolver
Inimigo seguir só quando olharmos para ele.
Meu novo game
The scripts needs to derive from monobehaviour
[RESOLVIDO] Erro - animações do Mixamo na Unity
[TUTORIAL] Singleton, A melhor forma de acessar a classe!
[Asset] Repositório + Assets
Executar animação via script
COMO MOVER UM OBJETO OU PERSONAGEM
[RESOLVIDO] GameObject que não Ativa
[TUTORIAL] Compilar para Android
Travar movimentação/rotação de um child.
[TUTORIAL] Android - Sistema de controle third person shooter, Joystick + Swipe camera
[RESOLVIDO] Unity 2018.2.14f1(64bit) sem audio
Como alterar propriedades em uma clip de animação mantendo o padrão em outros clips?
GIRAR EM TORNO DE ACORDO COM AS TECLAS
[DUVIDA] Como permitir que o usuario envie uma imagem e a ajeite
Mobile Camera
Collider labirinto 2D
Efeito de "Super velocidade"
girar eixo de movimento
[RESOLVIDO] List Index error
Jogo Da Velha
Projeto de lei quer criminalizar criadores de jogos violentos ?!?!?!?
Avaliem meu APK!!!!!
[TUTORIAL] Salvar dados com playerprefs facilmente.
Conta android para desenvolvedor
[Asset] Jogo em plataforma 2D para aprendizado
Sistema de Plataforma com Rotas controlado por Touch
DIVULGAÇÃO
[RESOLVIDO] Como saber se o jogador esta vendo um certo objeto?
derrubar arvore em jogo 2d
[RESOLVIDO] Como resetar a cena em que o player estar
ESTOU COM UM PROBLEMA EM UM SCRIPT
Bool ficar verdadeira no multiplayer em script de inimigo? (Unet)
Game Mobile
[RESOLVIDO] Não consigo deixar meus áudios em 3D...
Pressionar Botão por um determinado tempo
Histórico de Input
como limitar o zoom mínimo e máximo no lean touch
Como que faço para rotacionar um objeto na posição do player como o cenario
[RESOLVIDO] Bug textura, SketchUp para Unity 3d
Unity - Excluir Ads Criado.
[RESOLVIDO] Lanterna Sumindo
Setar a posição do mouse
Medidores interativos como fazer na Unity
[RESOLVIDO] Unity - Adicionar Espaço Em Array
Pack de áudio/ efeitos sonoros gratuitos.
Game Engine
[TUTORIAL] Sistema simples para VOLTAR NO TEMPO, Unity 3D
Point Light com qualidade horrivel, o que pode ser?
PC, Mobile ou ambos?
Efeito Glowing
[RESOLVIDO] box collider conflito
[RESOLVIDO] Blender - Mancha Preta
[TUTORIAL] Unity 5- Sistema de PLATAFORMAS COM ROTAS
ESTOU COM UM PROBLEMA DE ANIMAÇÃO!!!
Câmera Orbital Modificada
[RESOLVIDO] Uma duvida sobre colliders 2d
Unity - Inspetor Personalizado
Software para testar AR no PC
Salvar Cores com Json
Objeto que pula
[RESOLVIDO] limite de posicionamento
Enemy grid movement
[RESOLVIDO] AJUDA COM SCRIPT
TANK DEFENDER II
[TUTORIAL] Sistema simples de Cutscenes
Sisteminha para coleta de itens
Recrutamento para desenvolvimento de um Projeto
fazer unity5 imprimir
AJUDA COM SCRIPT DE DISPARO
Um código e um agradecimento ao todo mundo.
Dúvida de shotter 2D...
Hoje à(s) 5:03 pm
Hoje à(s) 4:02 pm
Hoje à(s) 2:46 pm
Hoje à(s) 2:16 pm
Hoje à(s) 2:32 am
Ontem à(s) 9:35 pm
Ontem à(s) 8:43 pm
Ontem à(s) 8:39 pm
Ontem à(s) 8:30 pm
Ontem à(s) 8:25 pm
Ontem à(s) 1:04 pm
Ontem à(s) 3:28 am
Ontem à(s) 3:25 am
Qua Abr 17, 2019 8:26 pm
Qua Abr 17, 2019 8:16 pm
Seg Abr 15, 2019 11:27 pm
Seg Abr 15, 2019 11:24 pm
Seg Abr 15, 2019 9:53 pm
Seg Abr 15, 2019 7:15 pm
Seg Abr 15, 2019 12:29 pm
Dom Abr 14, 2019 11:26 am
Dom Abr 14, 2019 11:23 am
Dom Abr 14, 2019 1:42 am
Sab Abr 13, 2019 2:33 pm
Sab Abr 13, 2019 1:36 pm
Sex Abr 12, 2019 8:44 pm
Qui Abr 11, 2019 11:18 pm
Qui Abr 11, 2019 12:50 pm
Qua Abr 10, 2019 10:59 am
Qua Abr 10, 2019 1:01 am
Ter Abr 09, 2019 7:31 pm
Ter Abr 09, 2019 6:39 pm
Ter Abr 09, 2019 3:47 pm
Seg Abr 08, 2019 10:12 pm
Seg Abr 08, 2019 8:59 pm
Dom Abr 07, 2019 8:55 pm
Dom Abr 07, 2019 8:01 pm
Dom Abr 07, 2019 3:05 pm
Sab Abr 06, 2019 11:52 am
Sab Abr 06, 2019 12:12 am
Sex Abr 05, 2019 10:46 pm
Sex Abr 05, 2019 9:38 pm
Sex Abr 05, 2019 9:36 pm
Sex Abr 05, 2019 9:31 pm
Sex Abr 05, 2019 9:27 pm
Qui Abr 04, 2019 9:18 pm
Qui Abr 04, 2019 8:21 pm
Qui Abr 04, 2019 4:37 pm
Qui Abr 04, 2019 2:48 pm
Qui Abr 04, 2019 12:31 am
Qua Abr 03, 2019 7:09 pm
Qua Abr 03, 2019 4:37 pm
Qua Abr 03, 2019 4:32 pm
Ter Abr 02, 2019 11:18 pm
Ter Abr 02, 2019 7:32 pm
Ter Abr 02, 2019 6:18 pm
Ter Abr 02, 2019 4:50 pm
Ter Abr 02, 2019 4:19 am
Seg Abr 01, 2019 9:22 pm
Seg Abr 01, 2019 9:19 pm
Seg Abr 01, 2019 9:15 pm
Seg Abr 01, 2019 8:58 pm
Seg Abr 01, 2019 6:12 pm
Seg Abr 01, 2019 4:00 pm
Seg Abr 01, 2019 3:35 pm
Seg Abr 01, 2019 1:23 pm
Seg Abr 01, 2019 1:09 am
Dom Mar 31, 2019 6:07 pm
Dom Mar 31, 2019 11:26 am
Sab Mar 30, 2019 9:03 pm
Sab Mar 30, 2019 6:09 pm
Sab Mar 30, 2019 5:50 pm
Sab Mar 30, 2019 4:56 pm
Sab Mar 30, 2019 8:22 am
Sab Mar 30, 2019 8:21 am
Sex Mar 29, 2019 11:56 pm
Sex Mar 29, 2019 4:31 pm
Sex Mar 29, 2019 3:57 pm
Sex Mar 29, 2019 3:39 pm
Sex Mar 29, 2019 12:29 pm
Sex Mar 29, 2019 4:54 am
Sex Mar 29, 2019 4:50 am
Sex Mar 29, 2019 4:41 am
Qui Mar 28, 2019 4:26 pm
Qui Mar 28, 2019 1:39 pm
Qui Mar 28, 2019 8:05 am
Qui Mar 28, 2019 8:04 am
Ter Mar 26, 2019 11:02 pm
Ter Mar 26, 2019 5:41 pm
Ter Mar 26, 2019 2:19 pm
Ter Mar 26, 2019 12:53 pm
Seg Mar 25, 2019 11:52 pm
Seg Mar 25, 2019 11:22 pm
Seg Mar 25, 2019 9:20 pm
Seg Mar 25, 2019 1:39 am
Dom Mar 24, 2019 6:17 pm
Sab Mar 23, 2019 10:30 pm
Sab Mar 23, 2019 9:18 pm
Sab Mar 23, 2019 8:39 pm
Magnatah
LucasRangel
darkrj
Magnatah
MarcosSchultz
marlon33
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
glauco
ffabim
ffabim
Callyde Jr
mathhBR
numb123
kraulim
MarcosSchultz
Magnatah
Akuma97
Magnatah
BRGC
ffabim
diegopds
NKKF
dstaroski
MarceloYBP
guimaraf
everton0101
Master3353
Magnatah
augustobrito
NotoriousDev
DEQUISTER1994
Fernando Andrey
fabricadegame
NotoriousDev
iToddy
marciosilva
LucasRangel
wagnercaragua
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
wagnercaragua
NotoriousDev
Unidade3d5
Tegh
rejão
rafaelllsd
JohnRambo
NKKF
edvanmelo
niao
NKKF
Tegh
niao
fecirineu
fecirineu
fecirineu
BrazaTattoo
NKKF
NKKF
Chilinger
emerson vitor
BrazaTattoo
Magnatah
Guinho3p
luiz12345
Magnatah
Magnatah
Zack2
Chilinger
Chilinger
MarcosSchultz
Magnatah
michelly
eduardonog30
Magnatah
MarcosSchultz
MarcosSchultz
MarcosSchultz
mathhBR
Magnatah
Chilinger
Chilinger
luiz12345
Span
Unidade3d5
Diego Felix
wagnercaragua
AnderGames
Magnatah
ShadowWG
Encracker
Diego Felix
dstaroski
Weslley

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 : 2358
REPUTAÇÃO : 452
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 : 1212
REPUTAÇÃO : 14
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 : 1212
REPUTAÇÃO : 14
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 : 2358
REPUTAÇÃO : 452
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 : 61659
REPUTAÇÃO : 2206
Idade : 22
Á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 : 2358
REPUTAÇÃO : 452
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 : 1212
REPUTAÇÃO : 14
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
Isabela
ProgramadorMaster

Feminino PONTOS : 768
REPUTAÇÃO : 237
Idade : 19
Áreas de atuação : LowPoly, Escultura digital, generalista 3D.
Estudando C# pra honrar a tag :3
Respeito as regras : Histórico de Input Aad8pUi

Ver perfil do usuário https://www.youtube.com/watch?v=mer6X7nOY_o

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
Programador

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

Ver perfil do usuário

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 : 1383
REPUTAÇÃO : 37
Idade : 23
Á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 : 3458
REPUTAÇÃO : 667
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 : 2358
REPUTAÇÃO : 452
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