Como pular somente com toque simples no touch Android
4 participantes
Página 1 de 1
Como pular somente com toque simples no touch Android
Boa tarde pessoal, estou desenvolvendo um jogo plataforma e gostaria de saber como eu faço para limitar a ação de pulo do meu personagem para apenas o toque simples, acontece q vou colocar outra ação quando ele der um toque duplo no touch e outra quando ele deslizasse no touch, ele está pulando para qualquer toque na tela seja simples ou não. Tentei de algumas formas mas não deu certo, segue o script do pulo.
- Código:
void FixedUpdate() {
if (gamecontroller.CurrentState == StateMachine.INGAME) {
Move();
Jump();
}
}
void Jump(){
float tocouTelaPulo = 0;
if (Input.touches [0].tapCount > 1) {
} else {
var AbsVelY = Mathf.Abs (rb.velocity.y);
//Input.GetKeyDown("up")
if (Input.touches [0].tapCount < 1 && AbsVelY <= 0.05f && tocouTela > 1) { // tocouTela é uma variavel que usei pra comecar o jogo quando o jogador tocar na tela
tocouTelaPulo++;
}
if (tocouTelaPulo == 1) {
rb.AddForce (new Vector2 (rb.velocity.x, jumpForce));
}
}
}
Bruno MP- Iniciante
- PONTOS : 2752
REPUTAÇÃO : 0
Respeito as regras :
Re: Como pular somente com toque simples no touch Android
Poderia criar algo do tipo :Bruno MP escreveu:Boa tarde pessoal, estou desenvolvendo um jogo plataforma e gostaria de saber como eu faço para limitar a ação de pulo do meu personagem para apenas o toque simples, acontece q vou colocar outra ação quando ele der um toque duplo no touch e outra quando ele deslizasse no touch, ele está pulando para qualquer toque na tela seja simples ou não. Tentei de algumas formas mas não deu certo, segue o script do pulo.
- Código:
void FixedUpdate() {
if (gamecontroller.CurrentState == StateMachine.INGAME) {
Move();
Jump();
}
}
void Jump(){
float tocouTelaPulo = 0;
if (Input.touches [0].tapCount > 1) {
} else {
var AbsVelY = Mathf.Abs (rb.velocity.y);
//Input.GetKeyDown("up")
if (Input.touches [0].tapCount < 1 && AbsVelY <= 0.05f && tocouTela > 1) { // tocouTela é uma variavel que usei pra comecar o jogo quando o jogador tocar na tela
tocouTelaPulo++;
}
if (tocouTelaPulo == 1) {
rb.AddForce (new Vector2 (rb.velocity.x, jumpForce));
}
}
}
Quando você apertar 1x ele solta um cronometro , se o usuario não apertar o touch dnv até esse tempo ele pula.
EX :
click = 0;
if(Input.GetKeyDown("a")){
tempoGo = true;
click = click + 1;
}
if(tempoGo == true){
tempo += 1 * Time.deltaTime;
}
if(tempo < 0.3){
if(click >= 2)
{
uma ação;
}
}else{
pular;
}
Eu fiz com input porque não sei como faz em android kk Mas é só substituir no seu.
Resumindo a lógica :
Quando você aperta na tela a variavel click recebe ela mesma mais 1. Desta forma se você clica uma vez , ela recebe 1 , se você clica 2x ela recebe 2.
Ao mesmo tempo quando você clica somente uma vez a variavel GoTempo , solta o "cronometro".
Enquanto o tempo for menor doque 0.3(Limite que ele tem para dar o segundo clique) , ele pergunta se o usuario deu 2 cliques.
Se passados os 0.3 segundos e a variavel click continuar valendo 1, quer dizer que ele só clicou uma vez.Neste caso ele recebe a ação de pular.
Ai quando ele tocasse o chão , resetaria tudo.(o tempo , o GoTempo e o click)
Não sei se o codgo vai funcionar porque fiz a mão , mas espero que entenda a ideia e de para reproduzir.
Boa Sorte!
lesgoy- Mestre
- PONTOS : 3488
REPUTAÇÃO : 49
Respeito as regras :
Re: Como pular somente com toque simples no touch Android
lesgoy: Coloque seus codigos dentro de um script;
BrunoMP:
https://docs.unity3d.com/ScriptReference/Input-touchCount.html
https://docs.unity3d.com/ScriptReference/30_search.html?q=input.touch
- Código:
//Aqui
BrunoMP:
https://docs.unity3d.com/ScriptReference/Input-touchCount.html
https://docs.unity3d.com/ScriptReference/30_search.html?q=input.touch
Phph09- Profissional
- PONTOS : 3788
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: Como pular somente com toque simples no touch Android
Não tenho tanto tempo assim neste forum então não sei usar esses atalhos :/ , além do mais fiz o codigo de cabeçaPhph09 escreveu:lesgoy: Coloque seus codigos dentro de um script;
- Código:
//Aqui
BrunoMP:
https://docs.unity3d.com/ScriptReference/Input-touchCount.html
https://docs.unity3d.com/ScriptReference/30_search.html?q=input.touch
lesgoy- Mestre
- PONTOS : 3488
REPUTAÇÃO : 49
Respeito as regras :
Re: Como pular somente com toque simples no touch Android
Muito obrigado pela ajuda, lesgoy tentei implementar um temporizador mas ele continua pulando com toques duplos, não entendi muito bem essa função Time.deltaTime ela inicia a contagem quando declarada,no caso quando seu if for executado?
Phph09, pelo que eu entendi essa função touchCount verificado quantos dedos estão tocando a tela, não seria? Eu encontrei a função tapCount que funciona bem para toques duplos, mas msm declarando se (Input.touches [0].tapCount == 1) ele da como verdeiro com mais de um toque.
- Código:
void FixedUpdate() {
if (gamecontroller.CurrentState == StateMachine.INGAME) {
Jump();
Move();
}
}
void Jump(){
if (Input.touchCount > 0 && Input.GetTouch (0).phase == TouchPhase.Began && tocouTela > 0) {
click +=1;
tempoGo = true;
}
if (tempoGo && (tempo += 1 * Time.deltaTime) < 0.4) {
if (click >= 2){
// Ação de duplo clique
tempo = 0;
click = 0;
tempoGo = false;
}
} else {
var AbsVelY = Mathf.Abs (rb.velocity.y);
if (click == 1 && AbsVelY <= 0.05f) {
rb.AddForce (new Vector2 (rb.velocity.x, jumpForce));
tempo = 0;
click = 0;
tempoGo = false;
}
}
}
Phph09, pelo que eu entendi essa função touchCount verificado quantos dedos estão tocando a tela, não seria? Eu encontrei a função tapCount que funciona bem para toques duplos, mas msm declarando se (Input.touches [0].tapCount == 1) ele da como verdeiro com mais de um toque.
Bruno MP- Iniciante
- PONTOS : 2752
REPUTAÇÃO : 0
Respeito as regras :
Re: Como pular somente com toque simples no touch Android
Nãooo , olha funciona assim . Você marca o tempo no incício como 0.Bruno MP escreveu:Muito obrigado pela ajuda, lesgoy tentei implementar um temporizador mas ele continua pulando com toques duplos, não entendi muito bem essa função Time.deltaTime ela inicia a contagem quando declarada,no caso quando seu if for executado?
- Código:
void FixedUpdate() {
if (gamecontroller.CurrentState == StateMachine.INGAME) {
Jump();S
Move();
}
}
void Jump(){
if (Input.touchCount > 0 && Input.GetTouch (0).phase == TouchPhase.Began && tocouTela > 0) {
click +=1;
tempoGo = true;
}
if (tempoGo && (tempo += 1 * Time.deltaTime) < 0.4) {
if (click >= 2){
// Ação de duplo clique
tempo = 0;
click = 0;
tempoGo = false;
}
} else {
var AbsVelY = Mathf.Abs (rb.velocity.y);
if (click == 1 && AbsVelY <= 0.05f) {
rb.AddForce (new Vector2 (rb.velocity.x, jumpForce));
tempo = 0;
click = 0;
tempoGo = false;
}
}
}
Phph09, pelo que eu entendi essa função touchCount verificado quantos dedos estão tocando a tela, não seria? Eu encontrei a função tapCount que funciona bem para toques duplos, mas msm declarando se (Input.touches [0].tapCount == 1) ele da como verdeiro com mais de um toque.
E quando vc diz : tempo += 1* Time.deltaTime;.
Siginifica que ele vai receber ele mesmo + 1 , ou seja , 1 , 2 , 3 ,4 como um cronometro ou um relogio.
Neste caso ele não recebe + 1 a cada frame, mas sim a cada segundo (por causa do Time.deltaTime) , desta forma ele sempre é igual independente do pc.
Este ( tempo += 1* Time.deltaTime) , você não pode colocar dentro de um if , porque se não ele só executa uma vez.
(criei um script no unity e vou por aqui , lembrando que só criei as varáveis refentes ao clique e duplo clique , as outras não sabia que tipo eram então você vai terq criar):
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Pulo : MonoBehaviour {
public float tempo;
public bool tempoGo;
public int click;
void Start () {
tempo = 0; //Esta variável controlara o tempo , por isso deve começar com 0.
tempoGo = false; //Esta variável serve para saber quando o cronometro
//vai começar a contar, neste caso quando ele for igual a true.
click = 0;//Esta variável controla quantos cliques o usuário deu.Começa com 0 , pois ele ainda não clicou.
}
void FixedUpdate()
{
if (gamecontroller.CurrentState == StateMachine.INGAME)
{
Jump();
Move();
}
}
// Update is called once per frame
void Update () {
if(tempoGo == true)
{
tempo += 1 * Time.deltaTime;//Ele só começa contar quando o tempoGo for true , e deve estar na função
//update pois ela executa durante todo o projeto e não só uma vez.
}
}
void Jump()
{
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began && tocouTela > 0)
{
click += 1;
tempoGo = true;
}
if (tempo < 0.4)
{
if (click >= 2)
{
// Ação de duplo clique.
tempo = 0;
click = 0;
tempoGo = false;
}
}
else
{
//Deu só um clique.
var AbsVelY = Mathf.Abs(rb.velocity.y);
if (click == 1 && AbsVelY <= 0.05f)
{
rb.AddForce(new Vector2(rb.velocity.x, jumpForce));
}
tempo = 0;
click = 0;
tempoGo = false;
}
}
}
lesgoy- Mestre
- PONTOS : 3488
REPUTAÇÃO : 49
Respeito as regras :
Re: Como pular somente com toque simples no touch Android
Ah , não sei como fazer o script ficar com o formato de código , desculpa
lesgoy- Mestre
- PONTOS : 3488
REPUTAÇÃO : 49
Respeito as regras :
Re: Como pular somente com toque simples no touch Android
lesgoy escreveu:Ah , não sei como fazer o script ficar com o formato de código , desculpa
é mais simples do que pensa, amigo
JohnRambo- Moderador
- PONTOS : 5171
REPUTAÇÃO : 661
Idade : 24
Áreas de atuação : Unity;
Programação;
Música e Sonorização;
Graduado em Análise e Desenvolvimento de Sistemas;
Respeito as regras :
Re: Como pular somente com toque simples no touch Android
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Pulo : MonoBehaviour {
public float tempo;
public bool tempoGo;
public int click;
void Start () {
tempo = 0; //Esta variável controlara o tempo , por isso deve começar com 0.
tempoGo = false; //Esta variável serve para saber quando o cronometro
//vai começar a contar, neste caso quando ele for igual a true.
click = 0;//Esta variável controla quantos cliques o usuário deu.Começa com 0 , pois ele ainda não clicou.
}
void FixedUpdate()
{
if (gamecontroller.CurrentState == StateMachine.INGAME)
{
Jump();
Move();
}
}
// Update is called once per frame
void Update () {
if(tempoGo == true)
{
tempo += 1 * Time.deltaTime;//Ele só começa contar quando o tempoGo for true , e deve estar na função
//update pois ela executa durante todo o projeto e não só uma vez.
}
}
void Jump()
{
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began && tocouTela > 0)
{
click += 1;
tempoGo = true;
}
if (tempo < 0.4)
{
if (click >= 2)
{
// Ação de duplo clique.
tempo = 0;
click = 0;
tempoGo = false;
}
}
else
{
//Deu só um clique.
var AbsVelY = Mathf.Abs(rb.velocity.y);
if (click == 1 && AbsVelY <= 0.05f)
{
rb.AddForce(new Vector2(rb.velocity.x, jumpForce));
}
tempo = 0;
click = 0;
tempoGo = false;
}
}
}
Ta ae, vlw Sr. Rambo
lesgoy- Mestre
- PONTOS : 3488
REPUTAÇÃO : 49
Respeito as regras :
Re: Como pular somente com toque simples no touch Android
para ficar bem mais facil de contar os cliques, use o ClickCount que conta somente os cliques consecutivos na tela; ae é só armazenar ele em uma variavel checar se ele é igual a um;
A unity geralmente começa contar os valores do zero, então se você checar se o valor do tapCount for 1 ele será verdadeiro mesmo com 2 toques ou dedos, tente checar se ele eh igual a Zero;
https://docs.unity3d.com/ScriptReference/EventSystems.PointerEventData-clickCount.html
ps: Nao sei se o ClickCount funciona para Touch, mas testa Ae;
A unity geralmente começa contar os valores do zero, então se você checar se o valor do tapCount for 1 ele será verdadeiro mesmo com 2 toques ou dedos, tente checar se ele eh igual a Zero;
https://docs.unity3d.com/ScriptReference/EventSystems.PointerEventData-clickCount.html
ps: Nao sei se o ClickCount funciona para Touch, mas testa Ae;
Phph09- Profissional
- PONTOS : 3788
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: Como pular somente com toque simples no touch Android
Muito obrigado pessoal consegui utilizando um temporizador Time.deltaTime, mas logo tento implementar utilizando esse CLickCount, muito obrigado a todos.
Bruno MP- Iniciante
- PONTOS : 2752
REPUTAÇÃO : 0
Respeito as regras :
Tópicos semelhantes
» Roll a Ball compilando para Android como pular ?
» Como simular a tecla "E" em um botão touch no android?
» [DUVIDA] Como utilizar o touch no Android em um jogo 2D
» Como fazer Rigidbody 2D seguir posição do toque na tela (Arrastar objeto com toque)
» [DUVIDA] Tiro com botao touch android!!
» Como simular a tecla "E" em um botão touch no android?
» [DUVIDA] Como utilizar o touch no Android em um jogo 2D
» Como fazer Rigidbody 2D seguir posição do toque na tela (Arrastar objeto com toque)
» [DUVIDA] Tiro com botao touch android!!
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos