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:
QUAL JOGO VOCÊ GOSTARIA QUE FOSSE REFEITO?
Realidade Virtual e Aumentada - onde tem?
Como salvar alterações de SetActive em GameObjects (UNITY)
interagir com os objetos somente se o mouse não estiver sobre o canvas
Sprites só é renderizado se diminuir o Size da camera
Alguém tem ideia de como posso fazer a movimentação do Lampião?
Mudar cor ?
[Dúvida] Toques na tela e UIs
[DUVIDA RAPIDA] SOBRE SCRIPTS
Unity celular - computador
Dúvida com botoes
Simulador de policia [C#] [Jogo em andamento] [Procurando Equipe]
Ajuda simples no trigger
preciso de ajuda
Como faço pra interagir com objeto ao olhar pra ele?
Busco alguem pra fazer algumas programações basicas (PAGO EM DINHEIRO)
Ativar animação ao se mover
[TUTORIAL] GameObject.FindWithTag ( Achar objetos na cena pelas Tags )
Colocar contagem regressiva
[TUTORIAL] Script de arma completo! [FREE]
Como faço pro carro só se mover quando eu engra no carro?
Como criar um cabo e realizar conexões
PLATAFORMA/COR ALEATORIA + AUMENTO DE VELOCIDADE
PRECISO DE UMA PESSOA QUE SAIBA MECHER COM ONLINE NO UNITY
Ajuda com Colisão na Camera
Como limitar o ângulo que um objeto pode atingir com Quaternion.LookRotation?
The freddy krueger's pie (Game)
Como programar animações de fade in e fade out para botão no Unity
Iniciar script sem anexá-lo a um GameObject
IDLE game tutorial, alguem?
Unity3D - Realistic Fps Prefab 1.44,1.45 - Sistema de Veículos - EVP5
Como reduzir tamanho do .APK ?
nao consigo publicar um asset, me ajudem
Não Consigo salvar ao sair, se puderem ajudar
Duvida sobre animações
Efeito realista em textura
Salvar as auterações de um prefab em modo de jogo.
[TUTORIAL] Sistema de Suspenção a Ar para carros (WheelCollider)
Sistema de Escolher Frases no Dialogo
Como transformo a posição de um objeto em outra posição?
Como posso girar a câmera envolta do player com touch
[TUTORIAL] Salvar SCORE e substituir caso faça mais pontos.
Sistema de backup local "semi-automático".
[TUTORIAL] Sistema de DIA E NOITE completo, com luzes noturnas e SISTEMA DE NUVENS
Ofereço-me é diferente de formar equipes
[TUTORIAL] Unity 5 - Skid Marks (marcas de derrapagem)
[TUTORIAL] Sistema de FPS com Corpo
COMO MUDAR GETKEY WASD PARA GETBUTTON HORIZONTAL E VERTICAL ???
BLENDER SNAP COM PROBLEMA
Dúvida sobre o Aleatório
objeto voando
PlayerPrefab
movimentar a camera com o mouse estilo jogo RTS
[TUTORIAL] AI Enemy ( Jogos de terror )
Unity - Como eu desativo e ativo uma hierarquia ao apertar um botão?
Problema na iluminação do shader Diffuse
[TUTORIAL] Limitar casas decimais sem arredondar
Erros atualização de versão da Unity
Erro no SDK - unity
Arquivos em Nuvem
Como faz para salvar as escalas dos arquivos no TilePallets?
[RESOLVIDO] To precisando de ajuda em um script pra fazer uma malha dinamica
Sistema de teletransporte em Python
[____SUGESTÕES PARA O FÓRUM____]
[RESOLVIDO] Como consigo uma conexão local?
Problema em Saber Qual Objeto vai ser Spawnado
Procuro ROTEIRISTA
[RESOLVIDO] Colocar limite de cliques em button
Número Aleatório Unity C#
Comsegui terminar um jogo, Agradeço a todos
Ajuda com recursos do unity.
[RESOLVIDO] Dicas de Otimização
Multiplayer - Por onde começar?
MENU DE SELEÇÃO DE FASES
DOTS - ECS + JOBS + Burst!
Salvar informação de loja
[TUTORIAL] Observer Pattern em C# - Tudo o que você precisa saber
Procura-Se Modelador e Programador, Com Futura Remuneraçao
Programe seus jogos mesmo sem saber C# (BOLT ⚡)
Como mudar a direção do tiro usando o controle analógico?
duvida navmesh
[RESOLVIDO] Problema na câmera com Realidade aumentada
vamos formar uma equipe pra lançar um jogo
Alterações indo para os prefabs e não para os clones.
Jogo de Terror com imagem pixelada
problemas com celulares android grande
Abrir Porta Malas Simples
grid unity
como interagir com os objetos somente se o mouse não estiver sobre o canvas
[RESOLVIDO] Carro Indo Para Tras Quando Aperta *W* e Indo Para Frente Quando Aperta *S*
Jogo para Android, testem por favor
Como fazer um script salvar o estado de um gameobject
[RESOLVIDO] Fechar todos aplicativos abertos.
talvez você goste disso (Cursos)
[RESOLVIDO] Unity - Como fechar o jogo ao clicar em um botão
[RESOLVIDO] Alterar área de click (mira) no touchscreen
Tocar no gameobject e ativar um canvas
Jogo Maria Bella
[TUTORIAL] Unity 2019 - Lanterna e pilhas, com UI
Hoje à(s) 6:53 pm
Hoje à(s) 5:44 pm
Hoje à(s) 4:24 pm
Hoje à(s) 11:14 am
Ontem à(s) 11:16 pm
Ontem à(s) 8:34 pm
Ontem à(s) 5:54 pm
Ontem à(s) 3:37 pm
Ontem à(s) 10:42 am
Ontem à(s) 10:33 am
Ontem à(s) 1:15 am
Seg Ago 03, 2020 10:39 pm
Seg Ago 03, 2020 9:28 pm
Seg Ago 03, 2020 8:32 pm
Seg Ago 03, 2020 8:28 pm
Seg Ago 03, 2020 7:38 pm
Seg Ago 03, 2020 3:41 pm
Seg Ago 03, 2020 9:39 am
Seg Ago 03, 2020 1:40 am
Dom Ago 02, 2020 5:53 pm
Dom Ago 02, 2020 5:44 pm
Dom Ago 02, 2020 2:28 pm
Dom Ago 02, 2020 1:14 pm
Dom Ago 02, 2020 12:57 pm
Dom Ago 02, 2020 4:40 am
Sab Ago 01, 2020 11:57 pm
Sab Ago 01, 2020 2:10 pm
Sab Ago 01, 2020 11:37 am
Sab Ago 01, 2020 8:31 am
Sab Ago 01, 2020 12:26 am
Sex Jul 31, 2020 9:02 pm
Sex Jul 31, 2020 3:59 pm
Sex Jul 31, 2020 3:58 pm
Qui Jul 30, 2020 7:18 pm
Qui Jul 30, 2020 4:54 pm
Qui Jul 30, 2020 10:55 am
Qui Jul 30, 2020 8:47 am
Qui Jul 30, 2020 4:42 am
Qua Jul 29, 2020 3:29 pm
Qua Jul 29, 2020 10:56 am
Qua Jul 29, 2020 12:30 am
Seg Jul 27, 2020 5:45 pm
Seg Jul 27, 2020 6:28 am
Seg Jul 27, 2020 6:22 am
Seg Jul 27, 2020 6:16 am
Seg Jul 27, 2020 4:00 am
Dom Jul 26, 2020 7:15 pm
Dom Jul 26, 2020 5:53 pm
Dom Jul 26, 2020 4:33 pm
Dom Jul 26, 2020 4:10 pm
Dom Jul 26, 2020 4:02 am
Dom Jul 26, 2020 3:58 am
Dom Jul 26, 2020 3:58 am
Dom Jul 26, 2020 3:52 am
Dom Jul 26, 2020 3:48 am
Dom Jul 26, 2020 12:04 am
Sab Jul 25, 2020 11:46 pm
Sab Jul 25, 2020 11:38 pm
Sab Jul 25, 2020 11:02 pm
Sab Jul 25, 2020 10:27 pm
Sab Jul 25, 2020 10:26 pm
Sab Jul 25, 2020 10:09 pm
Sab Jul 25, 2020 10:06 pm
Sab Jul 25, 2020 9:50 pm
Sab Jul 25, 2020 8:03 pm
Sex Jul 24, 2020 11:51 pm
Sex Jul 24, 2020 5:45 pm
Sex Jul 24, 2020 3:04 pm
Sex Jul 24, 2020 7:03 am
Qui Jul 23, 2020 6:15 pm
Qui Jul 23, 2020 5:31 pm
Qui Jul 23, 2020 5:27 pm
Qui Jul 23, 2020 1:58 pm
Qui Jul 23, 2020 1:51 pm
Qui Jul 23, 2020 1:43 pm
Qui Jul 23, 2020 12:48 pm
Qui Jul 23, 2020 11:58 am
Qui Jul 23, 2020 11:43 am
Qui Jul 23, 2020 8:18 am
Qua Jul 22, 2020 8:48 pm
Qua Jul 22, 2020 8:22 pm
Qua Jul 22, 2020 7:40 pm
Qua Jul 22, 2020 7:17 pm
Qua Jul 22, 2020 4:52 pm
Qua Jul 22, 2020 2:33 pm
Qua Jul 22, 2020 1:34 pm
Ter Jul 21, 2020 9:49 pm
Ter Jul 21, 2020 5:16 pm
Ter Jul 21, 2020 4:13 pm
Ter Jul 21, 2020 3:35 pm
Ter Jul 21, 2020 9:05 am
Ter Jul 21, 2020 5:13 am
Seg Jul 20, 2020 9:30 pm
Seg Jul 20, 2020 9:28 pm
Dom Jul 19, 2020 11:59 pm
Dom Jul 19, 2020 11:52 pm
Dom Jul 19, 2020 9:08 pm
Dom Jul 19, 2020 6:50 pm
Dom Jul 19, 2020 5:39 pm
NKKF
Callyde Jr
Alexlucas
JulioWinchester
TioUV
LúcioHenrique098
Callyde Jr
poyser
NKKF
Kakaroto222
garrito
Giwn
CShar
Magnatah
Magnatah
MayLeone
BoraAprender15
NKKF
JohnRambo
maxwellvale
maxwellvale
CShar
NKKF
SeTk
JulioWinchester
BigCouve
Callyde Jr
TheusReis
BRGC
speedluk
Samuelostgamer
JohnRambo
Yuri Heinz
joaoguil3
DhanielBrandão2
Édipo
Antônio T
garrito
EricknhYT
BigCouve
g2013santtos@gmail.com
raphaelperez
fabricadegame
fabricadegame
fabricadegame
garrito
SamonBR
CShar
IOOI
pdsimulador
iToddy
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
VaiPraLá123
Magnatah
JoelMJunior
KurotamaXIII
MarcosSchultz
MarcosSchultz
diegopds
MarcosSchultz
MarcosSchultz
NinjalaranjaTV
CShar
Ele paiva
Agoraaae3432
CShar
Yuri Heinz
sabbath
VaiPraLá123
artplayer
herisson07
artplayer
undertakerbr
sabbath
EricknhYT
Fagner
Fagner
Fagner
orph
Yuri Heinz
NKKF
VaiPraLá123
Fagner
Zer3301
bionics
JulioWinchester
EricknhYT
thales.ulisses
JoelMJunior
iToddy
iToddy
Hiyuzo
JoelMJunior
CShar
thales.ulisses
MarcosSchultz

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 : 3060
REPUTAÇÃO : 511
Idade : 15
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras : Histórico de Input Aad8pUi

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 : 1697
REPUTAÇÃO : 16
Idade : 19
Áreas de atuação : Programação, Modelagem 3D, Criação De Jogos Digitais.
Respeito as regras : Histórico de Input WvDYdlf

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 : 1697
REPUTAÇÃO : 16
Idade : 19
Áreas de atuação : Programação, Modelagem 3D, Criação De Jogos Digitais.
Respeito as regras : Histórico de Input WvDYdlf

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 : 3060
REPUTAÇÃO : 511
Idade : 15
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras : Histórico de Input Aad8pUi

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 : 62960
REPUTAÇÃO : 2465
Idade : 23
Áreas de atuação : Administrador do fórum
Respeito as regras : Histórico de Input Aad8pUi

https://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 : 3060
REPUTAÇÃO : 511
Idade : 15
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras : Histórico de Input Aad8pUi

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 : 1697
REPUTAÇÃO : 16
Idade : 19
Áreas de atuação : Programação, Modelagem 3D, Criação De Jogos Digitais.
Respeito as regras : Histórico de Input WvDYdlf

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 : 1265
REPUTAÇÃO : 259
Idade : 20
Respeito as regras : Histórico de Input Aad8pUi

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 : 1617
REPUTAÇÃO : 122
Idade : 25
Á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

https://www.instagram.com/ampercygames/

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 : 1855
REPUTAÇÃO : 38
Idade : 24
Áreas de atuação : Programação C#
Respeito as regras : Histórico de Input WvDYdlf

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 : 4043
REPUTAÇÃO : 704
Idade : 22
Áreas de atuação : https://exitside.com.br/
Respeito as regras : Histórico de Input Aad8pUi

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 : 3060
REPUTAÇÃO : 511
Idade : 15
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras : Histórico de Input Aad8pUi

Voltar ao Topo Ir em baixo

Voltar ao Topo


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