touch screem VS button,
Página 1 de 1
touch screem VS button,
tenho um touch screem simples que move a camera para o local onde ha o toque.
tenho alguns botoes UI na tela que executam alguns comandos como abrir um menu.
sempre que toque nesses botoes o touch também é ativado e a câmera se move para a ponto atrás do botão.
como nao desativar o touch ao clicar em um botão?
pesquisei na net e um amigo aqui me indicou o , RectTransformUtility.RectangleContainsScreenPoint.
esse é o script que formei alguem pode me ajudar ?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class touch : MonoBehaviour
{
public Transform _cameralocal;
public GameObject _camera;
public float velo;
public Transform ponto;
public GameObject seleted;
public bool tocou;
public float tempo;
public float tempoarrasto;
public float distancia;
public float distancianotoque;
public bool arrasto;
public RectTransform[] botoes;
// Start is called before the first frame update
// Update is called once per frame
void Update()
{
if (tocou == true)
{
tempo = tempo + Time.deltaTime;
if (tempo > 0.1)
seleted.SetActive(true);
if (tempo >= 0.3)
{
tocou = false;
tempo = 0;
}
}
for (int i = 0; i < botoes.Length; i++)
{
if (RectTransformUtility.RectangleContainsScreenPoint(botoes[i], Input.mousePosition))
{ //ignore the click //
}
else
{
Arrastar();
Toquetela();
}
}
}
public void Arrastar()
{
if (Input.touchCount > 0)
{
Touch toque = Input.GetTouch(0);
if (toque.phase == TouchPhase.Moved)
{
seleted.SetActive(false);
tocou = false;
if (Input.touchCount == 1)
{
arrasto = true;
_cameralocal.position += new Vector3(-toque.deltaPosition.x, 0, -toque.deltaPosition.y) * Time.deltaTime * velo;
}
}
if (arrasto == true)
{
tempoarrasto = tempoarrasto + Time.deltaTime;
if (tempoarrasto > 0.3)
{
arrasto = false;
tempoarrasto = 0;
}
}
}
}
public void Toquetela()
{
if (!arrasto)
{
Touch toque = Input.GetTouch(0);
if (toque.phase == TouchPhase.Began)
{
seleted.SetActive(false);
tocou = true;
Ray ray = Camera.main.ScreenPointToRay(toque.position);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
Debug.Log(hit.transform.tag);
if (hit.transform.tag != ("oceano"))
_cameralocal.position = hit.transform.position;
}
}
}
}
}
tenho alguns botoes UI na tela que executam alguns comandos como abrir um menu.
sempre que toque nesses botoes o touch também é ativado e a câmera se move para a ponto atrás do botão.
como nao desativar o touch ao clicar em um botão?
pesquisei na net e um amigo aqui me indicou o , RectTransformUtility.RectangleContainsScreenPoint.
esse é o script que formei alguem pode me ajudar ?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class touch : MonoBehaviour
{
public Transform _cameralocal;
public GameObject _camera;
public float velo;
public Transform ponto;
public GameObject seleted;
public bool tocou;
public float tempo;
public float tempoarrasto;
public float distancia;
public float distancianotoque;
public bool arrasto;
public RectTransform[] botoes;
// Start is called before the first frame update
// Update is called once per frame
void Update()
{
if (tocou == true)
{
tempo = tempo + Time.deltaTime;
if (tempo > 0.1)
seleted.SetActive(true);
if (tempo >= 0.3)
{
tocou = false;
tempo = 0;
}
}
for (int i = 0; i < botoes.Length; i++)
{
if (RectTransformUtility.RectangleContainsScreenPoint(botoes[i], Input.mousePosition))
{ //ignore the click //
}
else
{
Arrastar();
Toquetela();
}
}
}
public void Arrastar()
{
if (Input.touchCount > 0)
{
Touch toque = Input.GetTouch(0);
if (toque.phase == TouchPhase.Moved)
{
seleted.SetActive(false);
tocou = false;
if (Input.touchCount == 1)
{
arrasto = true;
_cameralocal.position += new Vector3(-toque.deltaPosition.x, 0, -toque.deltaPosition.y) * Time.deltaTime * velo;
}
}
if (arrasto == true)
{
tempoarrasto = tempoarrasto + Time.deltaTime;
if (tempoarrasto > 0.3)
{
arrasto = false;
tempoarrasto = 0;
}
}
}
}
public void Toquetela()
{
if (!arrasto)
{
Touch toque = Input.GetTouch(0);
if (toque.phase == TouchPhase.Began)
{
seleted.SetActive(false);
tocou = true;
Ray ray = Camera.main.ScreenPointToRay(toque.position);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
Debug.Log(hit.transform.tag);
if (hit.transform.tag != ("oceano"))
_cameralocal.position = hit.transform.position;
}
}
}
}
}
adenilson romao- MembroAvançado
- PONTOS : 2919
REPUTAÇÃO : 15
Respeito as regras :
Re: touch screem VS button,
aa finalmente consegui resolver eu problema.
não consegui através de nenhum metodo anterior.
descobrio que o button da unity são acionados na phase.end do toque e nao no phase.began.
entao mudei para end toque e mudei a ordem dos script adicionando uma boleana que limita a ação.
esta boleana é ativada por uma função sempre que o botao é ativado.
if (clicou == true)
{
tempo2 = tempo2 + Time.deltaTime;
if (tempo2 > 0.5)
{
tempo2 = 0;
clicou = false;
}
}
if (Input.touchCount > 0 && clicou==false)
{
Arrastar();
Toquetela();
}
não consegui através de nenhum metodo anterior.
descobrio que o button da unity são acionados na phase.end do toque e nao no phase.began.
entao mudei para end toque e mudei a ordem dos script adicionando uma boleana que limita a ação.
esta boleana é ativada por uma função sempre que o botao é ativado.
if (clicou == true)
{
tempo2 = tempo2 + Time.deltaTime;
if (tempo2 > 0.5)
{
tempo2 = 0;
clicou = false;
}
}
if (Input.touchCount > 0 && clicou==false)
{
Arrastar();
Toquetela();
}
adenilson romao- MembroAvançado
- PONTOS : 2919
REPUTAÇÃO : 15
Respeito as regras :
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos