Script de Mover
3 participantes
Página 1 de 1
Script de Mover
Ola Pessoal, eu estou usando o script de mover do marcos.
Eu queria saber como faço para ele reconhecer apenas o primeiro toque na tela igual Subway Surfs.
Por que esse Script quando voce toca na tela o perssonagem fica seguindo o toque, tipo voce toca na tela arras para os lados e para cima sem tirar o dedo da tela, eu queria que ele nao ficasse seguindo o toque.
Script:
Eu queria saber como faço para ele reconhecer apenas o primeiro toque na tela igual Subway Surfs.
Por que esse Script quando voce toca na tela o perssonagem fica seguindo o toque, tipo voce toca na tela arras para os lados e para cima sem tirar o dedo da tela, eu queria que ele nao ficasse seguindo o toque.
Script:
- Código:
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(Rigidbody))]
public class Mover : MonoBehaviour {//NESTE SCRIPT O PERSONAGEM DEVE SE MOVER PARA FRENTE NO EIXO Z(AZUL), PARA TIRAR DÚVIDAS, CONTATE WWW.SCHULTZGAMES.COM
private float ponteiroX, ponteiroY, novaPosicX;
private int indicePosic;
private bool podeMover, estaNoChao, pulouR;
private Vector3 posicInicial;
[Range(0.01f,1)]public float TempoParaMover = 0.15f;
[Range(1,5)]public int QuantoMover = 1;
[Range(1,20)]public float forcaDoPulo = 5.0f;
[Range(0,20)]public float velocidadeJogador = 3.0f;
public bool podePular = true;
public LayerMask LayersNaoIgnoradas = -1;
private Rigidbody corpoRigido;
public float velocidade = 0.01f;
void Start(){
corpoRigido = GetComponent<Rigidbody> ();
corpoRigido.constraints = RigidbodyConstraints.FreezeRotation;
posicInicial = transform.position;
novaPosicX = posicInicial.x + indicePosic*QuantoMover;
indicePosic = 0;
pulouR = false;
podeMover = true;
}
void Update () {
velocidadeJogador = velocidadeJogador + Time.deltaTime * velocidade;
estaNoChao = Physics.Linecast (transform.position, transform.position - Vector3.up, LayersNaoIgnoradas);
if (podeMover) {
DetectarMovimento ();
}
}
IEnumerator EsperarParaMover(float tempo) {
yield return new WaitForSeconds(tempo);
podeMover = true;
}
IEnumerator EsperarParaPular(float tempo) {
yield return new WaitForSeconds(tempo);
pulouR = false;
}
void DetectarMovimento(){
podeMover = false;
StartCoroutine (EsperarParaMover(TempoParaMover));
ponteiroX = ponteiroY = 0;
if (Input.GetMouseButton(0)) {
ponteiroX = Input.GetAxis ("Mouse X");
ponteiroY = Input.GetAxis ("Mouse Y");
}
if (Input.touchCount > 0){
ponteiroX = Input.touches[0].deltaPosition.x;
ponteiroY = Input.touches[0].deltaPosition.y;
}
//DETECTAR EIXO X
if (ponteiroX > 0) {
indicePosic ++;
novaPosicX = posicInicial.x + indicePosic*QuantoMover;
}
else if (ponteiroX < 0) {
indicePosic --;
novaPosicX = posicInicial.x + indicePosic*QuantoMover;
}
//DETECTAR EIXO Y
if (ponteiroY > 0.1f && podePular) {
Pular ();
}
}
void FixedUpdate(){
Vector3 proximaPosic = new Vector3 (novaPosicX, transform.position.y, transform.position.z);
transform.position = Vector3.Lerp (transform.position, proximaPosic, Time.deltaTime * 5);
corpoRigido.velocity = new Vector3 (corpoRigido.velocity.x, corpoRigido.velocity.y, velocidadeJogador);
}
void Pular(){
if(estaNoChao == true && pulouR == false){
corpoRigido.AddForce(Vector3.up * forcaDoPulo, ForceMode.Impulse);
pulouR = true;
StartCoroutine (EsperarParaPular(0.5f));
}
}
}
Re: Script de Mover
OLÁ! ESTE CANAL TALVEZ TENHA O QUE DESEJA!bruxamissi escreveu:Ola Pessoal, eu estou usando o script de mover do marcos.
Eu queria saber como faço para ele reconhecer apenas o primeiro toque na tela igual Subway Surfs.
Por que esse Script quando voce toca na tela o perssonagem fica seguindo o toque, tipo voce toca na tela arras para os lados e para cima sem tirar o dedo da tela, eu queria que ele nao ficasse seguindo o toque.
Script:
- Código:
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(Rigidbody))]
public class Mover : MonoBehaviour {//NESTE SCRIPT O PERSONAGEM DEVE SE MOVER PARA FRENTE NO EIXO Z(AZUL), PARA TIRAR DÚVIDAS, CONTATE WWW.SCHULTZGAMES.COM
private float ponteiroX, ponteiroY, novaPosicX;
private int indicePosic;
private bool podeMover, estaNoChao, pulouR;
private Vector3 posicInicial;
[Range(0.01f,1)]public float TempoParaMover = 0.15f;
[Range(1,5)]public int QuantoMover = 1;
[Range(1,20)]public float forcaDoPulo = 5.0f;
[Range(0,20)]public float velocidadeJogador = 3.0f;
public bool podePular = true;
public LayerMask LayersNaoIgnoradas = -1;
private Rigidbody corpoRigido;
public float velocidade = 0.01f;
void Start(){
corpoRigido = GetComponent<Rigidbody> ();
corpoRigido.constraints = RigidbodyConstraints.FreezeRotation;
posicInicial = transform.position;
novaPosicX = posicInicial.x + indicePosic*QuantoMover;
indicePosic = 0;
pulouR = false;
podeMover = true;
}
void Update () {
velocidadeJogador = velocidadeJogador + Time.deltaTime * velocidade;
estaNoChao = Physics.Linecast (transform.position, transform.position - Vector3.up, LayersNaoIgnoradas);
if (podeMover) {
DetectarMovimento ();
}
}
IEnumerator EsperarParaMover(float tempo) {
yield return new WaitForSeconds(tempo);
podeMover = true;
}
IEnumerator EsperarParaPular(float tempo) {
yield return new WaitForSeconds(tempo);
pulouR = false;
}
void DetectarMovimento(){
podeMover = false;
StartCoroutine (EsperarParaMover(TempoParaMover));
ponteiroX = ponteiroY = 0;
if (Input.GetMouseButton(0)) {
ponteiroX = Input.GetAxis ("Mouse X");
ponteiroY = Input.GetAxis ("Mouse Y");
}
if (Input.touchCount > 0){
ponteiroX = Input.touches[0].deltaPosition.x;
ponteiroY = Input.touches[0].deltaPosition.y;
}
//DETECTAR EIXO X
if (ponteiroX > 0) {
indicePosic ++;
novaPosicX = posicInicial.x + indicePosic*QuantoMover;
}
else if (ponteiroX < 0) {
indicePosic --;
novaPosicX = posicInicial.x + indicePosic*QuantoMover;
}
//DETECTAR EIXO Y
if (ponteiroY > 0.1f && podePular) {
Pular ();
}
}
void FixedUpdate(){
Vector3 proximaPosic = new Vector3 (novaPosicX, transform.position.y, transform.position.z);
transform.position = Vector3.Lerp (transform.position, proximaPosic, Time.deltaTime * 5);
corpoRigido.velocity = new Vector3 (corpoRigido.velocity.x, corpoRigido.velocity.y, velocidadeJogador);
}
void Pular(){
if(estaNoChao == true && pulouR == false){
corpoRigido.AddForce(Vector3.up * forcaDoPulo, ForceMode.Impulse);
pulouR = true;
StartCoroutine (EsperarParaPular(0.5f));
}
}
}
:arrow: https://www.youtube.com/user/idbgamedev
Gabriel César O- Profissional
- PONTOS : 3986
REPUTAÇÃO : 217
Idade : 23
Áreas de atuação : (ESTUDANDO SEGUNDO GRAU), (FUÇANDO NO UNITY)){
Respeito as regras :
Re: Script de Mover
Esse canal nao Ajudou mt nao, o script de mover esta funcional so que eu queria que ele so reconhece o primeiro toque igual Subway surfs
Re: Script de Mover
Um jeito de fazer isto é limitar o toque com um cronometro, tipo, pra 0.5 segundos... Da pra criar um cronometro simples usando Time.deltaTime.
Enquanto o toque é feito, o cronometro cresce... se ele for maior que 0.5, um variável booleana fica true e o movimento para de ser reconhecido... uma lógica simples.
Enquanto o toque é feito, o cronometro cresce... se ele for maior que 0.5, um variável booleana fica true e o movimento para de ser reconhecido... uma lógica simples.
Re: Script de Mover
- Código:
public float tempo = 0.5f;
private float tempoCorrente;
private bool parar;
tempoCorrente += Time.deltaTime;
if(tempoCorrente > tempo){
parar = true;
}
Mais onde eu colocaria isso e como faria para ele so começar a contar quando tocar na tela e azer ele realmente para de mover?
Re: Script de Mover
- Código:
if (Input.touchCount > 0){
Este if diz se você está tocando na tela ou não...
Tópicos semelhantes
» Não Acho o Erro no Script - é um script para o player se mover
» Esse script não me faz me mover com o teclado pq?
» Dúvida sobre o script de Mover Objetos
» Script de Mover - Estilo Subway Surfs
» [Duvida] Script de mover objeto usando o RigidBody
» Esse script não me faz me mover com o teclado pq?
» Dúvida sobre o script de Mover Objetos
» Script de Mover - Estilo Subway Surfs
» [Duvida] Script de mover objeto usando o RigidBody
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos