Touch movendo objeto através duma Layer
Página 1 de 1
Touch movendo objeto através duma Layer
Olá Galera!!!
Estou com um dúvida aqui num código, que é o seguinte:
Estou movimentando um objeto através dum Bezier com vários pontos, porém coloquei o controle através dum Input.touchCount e configurei o Raycast para saber qual layer identificar ao ser tocado através do collider2D. Ai que vem o problema selecionei na unity a layer a ser tocado para executar o script, porém em qualquer lugar que toque na tela ele executa o script, não restringindo na área do Collider. Minha dúvida é essa: o toque tem que ser no objeto através da layer selecionada e não em qualquer lugar.
Segue o código:
Estou com um dúvida aqui num código, que é o seguinte:
Estou movimentando um objeto através dum Bezier com vários pontos, porém coloquei o controle através dum Input.touchCount e configurei o Raycast para saber qual layer identificar ao ser tocado através do collider2D. Ai que vem o problema selecionei na unity a layer a ser tocado para executar o script, porém em qualquer lugar que toque na tela ele executa o script, não restringindo na área do Collider. Minha dúvida é essa: o toque tem que ser no objeto através da layer selecionada e não em qualquer lugar.
Segue o código:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class BezierFollow : MonoBehaviour
{
private Collider2D drag;
public LayerMask layer;
[SerializeField]
private Transform[] routes;
private int routeToGo;
private float tParam;
private Vector2 catPosition;
private float speedModifier;
private bool coroutineAllowed;
private bool clicked;
private Touch touch;
void Start()
{
drag = GetComponent<Collider2D>();
routeToGo = 0;
tParam = 0f;
speedModifier = 1.5f;
coroutineAllowed = true;
}
void Update()
{
if (Input.touchCount > 0)
{
touch = Input.GetTouch(0);
Vector2 wp = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position);
RaycastHit2D hit = Physics2D.Raycast(wp, Vector2.zero, Mathf.Infinity, layer.value);
if (hit.collider != null)
{
clicked = true;
}
if (clicked)
{
if (touch.phase == TouchPhase.Began || touch.phase == TouchPhase.Ended)
{
if (coroutineAllowed)
StartCoroutine(GoByTheRoute(routeToGo));
}
}
}
}
private IEnumerator GoByTheRoute(int routeNumber)
{
coroutineAllowed = false;
Vector2 p0 = routes[routeNumber].GetChild(0).position;
Vector2 p1 = routes[routeNumber].GetChild(1).position;
Vector2 p2 = routes[routeNumber].GetChild(2).position;
Vector2 p3 = routes[routeNumber].GetChild(3).position;
while (tParam < 1)
{
tParam += Time.deltaTime * speedModifier;
catPosition = Mathf.Pow(1 - tParam, 3) * p0 +
3 * Mathf.Pow(1 - tParam, 2) * tParam * p1 +
3 * (1 - tParam) * Mathf.Pow(tParam, 2) * p2 +
Mathf.Pow(tParam, 3) * p3;
transform.position = catPosition;
yield return new WaitForEndOfFrame();
}
tParam = 0f;
routeToGo += 1;
if (routeToGo > routes.Length - 1)
routeToGo = 0;
coroutineAllowed = true;
}
}
edvanmelo- Iniciante
- PONTOS : 1833
REPUTAÇÃO : 0
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] Unity - Movendo a Câmera na Horizontal/Vertical com Touch
» Tem como deixar a Layer do objeto branca?
» Rotacionar objeto de acordo com direção que ele está se movendo
» Botoes da unity no android e destruir um objeto em qualquer lugar da cena com touch
» Rotacao de objeto (Z) conforme posicao do touch
» Tem como deixar a Layer do objeto branca?
» Rotacionar objeto de acordo com direção que ele está se movendo
» Botoes da unity no android e destruir um objeto em qualquer lugar da cena com touch
» Rotacao de objeto (Z) conforme posicao do touch
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos