[RESOLVIDO] Combo com a Mesma Tecla
4 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Combo com a Mesma Tecla
Olá, queria saber se alguém resolve o problema do meu script para uma simples simulação de "animação de Dash": aperto 2x o "L" em menos de 2 segundos
a frase "2° INPUT, ANIMACAO DASH". As vezes aparece a frase repetida. Se eu usasse teclas diferentes, funcionaria,
mas como é um "Dash" de personagem, precisa ser a mesma tecla, grato!!!!!
a frase "2° INPUT, ANIMACAO DASH". As vezes aparece a frase repetida. Se eu usasse teclas diferentes, funcionaria,
mas como é um "Dash" de personagem, precisa ser a mesma tecla, grato!!!!!
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TesteDash : MonoBehaviour {
public bool VALIDA = false;
public float tempo = 0.0f;
public bool tempoContar = false;
void FixedUpdate () {
if(tempoContar)
tempo += Time.deltaTime;
if (tempo>=2)
{
print("ZEROU O TEMPO");
tempo = 0;
VALIDA = false;
tempoContar = false;
}
if(Input.GetKeyUp(KeyCode.L) & VALIDA & tempo<2)
{
print("2° INPUT, ANIMACAO DASH");
tempo = 0;
VALIDA = false;
tempoContar = false;
}
if (Input.GetKeyUp(KeyCode.L) && !VALIDA)
{
print("1° INPUT");
VALIDA = true;
tempoContar = true;
}
}
}
osiasbezerra- Avançado
- PONTOS : 3596
REPUTAÇÃO : 8
Respeito as regras :
Re: [RESOLVIDO] Combo com a Mesma Tecla
Acho que a contagem de tempo deveria acontecer no momento em que vc aperta a tecla e usar Input.GetKeyDown ao invés Input.GetKeyUp
lelouchsdky- Avançado
- PONTOS : 2967
REPUTAÇÃO : 21
Áreas de atuação : Cursando Licenciatura em computação
Respeito as regras :
Re: [RESOLVIDO] Combo com a Mesma Tecla
O problema é que eu tinha usado o Input.GetKeyDown primeiro. Esse código já é uma alteração do que eu tinha feito, inclusive coloquei curto-circuito no if e o Input no final da condição, para não setar o valor, se a primeira condição for falsa. Se você imaginar um código simples para aparecer uma frase apertando duas vezes uma tecla num tempo máximo, eu agradeço, não precisa ser esse código. eu acho sabe o que? que é o problema de semáforo, deve haver uma tread acessando um Input if e outra acessando outro Input, daí não funciona a iteração.
osiasbezerra- Avançado
- PONTOS : 3596
REPUTAÇÃO : 8
Respeito as regras :
Re: [RESOLVIDO] Combo com a Mesma Tecla
Quis dizer que o semáforo não é o problema, ele resolve o problema, seu eu descobrir antes, eu posto aqui, pois resolvendo o race condition pode haver o problema de deadlock...
osiasbezerra- Avançado
- PONTOS : 3596
REPUTAÇÃO : 8
Respeito as regras :
Phph09- Profissional
- PONTOS : 3788
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: [RESOLVIDO] Combo com a Mesma Tecla
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TesteDash : MonoBehaviour {
public float tempo = 0.0f;
public int contador=0;
public bool tempoContar = false;
void Update () {
//Inicia contagem de tempo
if(tempoContar)
tempo += Time.deltaTime;
If(contador==2){
Print("combo");
contador=0;
tempo=0;
tempoContar=false;
}
If(tempo>=2){
contador=0;
tempo=0;
tempoContar=false;}
If(Input.GetKeyDown(KeyCode.L) &&yesUp){
tempoContar=true;
contador++;
yesUp=false;}
If(Input.GetKeyUp(KeyCode.L))
yesUp=true;
}
}
Tiago95- Avançado
- PONTOS : 2628
REPUTAÇÃO : 32
Respeito as regras :
Re: [RESOLVIDO] Combo com a Mesma Tecla
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TesteDash : MonoBehaviour {
public float tempo = 0.0f;
public int contador=0;
public bool tempoContar = false;
public bool yesUp=true;
void Update () {
//Inicia contagem de tempo
if(tempoContar)
tempo += Time.deltaTime;
if(contador==2){
print("combo");
contador=0;
tempo=0;
tempoContar=false;
}
if(tempo>=2){
contador=0;
tempo=0;
tempoContar=false;}
if(Input.GetKeyDown(KeyCode.L) &&yesUp){
tempoContar=true;
contador++;
yesUp=false;}
if(Input.GetKeyUp(KeyCode.L))
yesUp=true;
}
}
Tiago95- Avançado
- PONTOS : 2628
REPUTAÇÃO : 32
Respeito as regras :
Re: [RESOLVIDO] Combo com a Mesma Tecla
Fiz no editor de texto do Cel,podem apagar kkkTiago95 escreveu:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TesteDash : MonoBehaviour {
public float tempo = 0.0f;
public int contador=0;
public bool tempoContar = false;
void Update () {
//Inicia contagem de tempo
if(tempoContar)
tempo += Time.deltaTime;
If(contador==2){
Print("combo");
contador=0;
tempo=0;
tempoContar=false;
}
If(tempo>=2){
contador=0;
tempo=0;
tempoContar=false;}
If(Input.GetKeyDown(KeyCode.L) &&yesUp){
tempoContar=true;
contador++;
yesUp=false;}
If(Input.GetKeyUp(KeyCode.L))
yesUp=true;
}
}
Tiago95- Avançado
- PONTOS : 2628
REPUTAÇÃO : 32
Respeito as regras :
Re: [RESOLVIDO] Combo com a Mesma Tecla
Só precisa verificar, não estou com PC p isso. Se o contador tá começando a contar do zero mesmo toda vez e se tá somando corretamente. Se não tem q ver se tem outro método ou fazer cálculos p q conte o tempo corretamente. Mas o código creio q isso resolva. Vou testar posteriormenteTiago95 escreveu:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TesteDash : MonoBehaviour {
public float tempo = 0.0f;
public int contador=0;
public bool tempoContar = false;
public bool yesUp=true;
void Update () {
//Inicia contagem de tempo
if(tempoContar)
tempo += Time.deltaTime;
if(contador==2){
print("combo");
contador=0;
tempo=0;
tempoContar=false;
}
if(tempo>=2){
contador=0;
tempo=0;
tempoContar=false;}
if(Input.GetKeyDown(KeyCode.L) &&yesUp){
tempoContar=true;
contador++;
yesUp=false;}
if(Input.GetKeyUp(KeyCode.L))
yesUp=true;
}
}
Tiago95- Avançado
- PONTOS : 2628
REPUTAÇÃO : 32
Respeito as regras :
Re: [RESOLVIDO] Combo com a Mesma Tecla
tiago95, código genial!!! muito obrigado mesmo!! obrigado a todos que responderam!!! Funcionou perfeitamente!!!! Esse fórum é demais! sempre me respondem, muito grato, valeu!!!
osiasbezerra- Avançado
- PONTOS : 3596
REPUTAÇÃO : 8
Respeito as regras :
Re: [RESOLVIDO] Combo com a Mesma Tecla
[RESOLVIDO]
osiasbezerra- Avançado
- PONTOS : 3596
REPUTAÇÃO : 8
Respeito as regras :
Re: [RESOLVIDO] Combo com a Mesma Tecla
Infelizmente, qndo se quer apenas um clique de botão no Update, por repetir todo o código a cada frame, acaba q entra no if do Input Down, por exemplo, mais de uma vez mesmo apertando só uma. Problema da Unity. Então vc tem q fazer essa verificação, se ocorreu um Up p poder autorizar e executar um Down. Acho q não fui mto claro, mas é isso aí. Q Bom q deu certo! Bom trabalho!osiasbezerra escreveu:tiago95, código genial!!! muito obrigado mesmo!! obrigado a todos que responderam!!! Funcionou perfeitamente!!!! Esse fórum é demais! sempre me respondem, muito grato, valeu!!!
Tiago95- Avançado
- PONTOS : 2628
REPUTAÇÃO : 32
Respeito as regras :
Re: [RESOLVIDO] Combo com a Mesma Tecla
Engraçado, Tiago95, eu achava, que, como tinham pelo menos duas threads, uma para cada Input por causa do scheduler, hora aparecia duas mensagens, hora não; daí, eu clicava num Input e já entrava no segundo, e o que fiz (achando que tinha duas thres) while(true){condicao; break} isso dentro do Update, só para testar, e isso congelou o Unity, pois imaginava no mínimo, problema de desempenho.
osiasbezerra- Avançado
- PONTOS : 3596
REPUTAÇÃO : 8
Respeito as regras :
Re: [RESOLVIDO] Combo com a Mesma Tecla
Eu entendi, Tiago, o InputDown, acaba não sendo um Trigger, vc tem um disparo que viabiliza o true para depois ser false, beleza mesmo esse código!!
osiasbezerra- Avançado
- PONTOS : 3596
REPUTAÇÃO : 8
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] Reproduzir audio e com a mesma tecla um audio diferente
» [RESOLVIDO] Apertar duas vezes uma tecla
» [RESOLVIDO] Sistema De Combo
» [RESOLVIDO] Como fazer um objeto ter a mesma rotação de outro
» [RESOLVIDO] Variável de tecla
» [RESOLVIDO] Apertar duas vezes uma tecla
» [RESOLVIDO] Sistema De Combo
» [RESOLVIDO] Como fazer um objeto ter a mesma rotação de outro
» [RESOLVIDO] Variável de tecla
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos