[TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
+9
Édipo
thiagograssi
Eduardoro39
Weslley
matsuismael
Hardencio
dinho
darkz
MarcosSchultz
13 participantes
Página 1 de 2
Página 1 de 2 • 1, 2
[TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Fala galera, elaborei este script simples que permite mover o seu jogador com Touch, como também com o Mouse, no estilo subway surfers... para jogos do tipo infinity runner
Basta criar um Script em C# com o nome "Mover", com o código abaixo, e jogar no seu jogador.
este script funcionará se o seu personagem se mover para frente no eixo Z
Basta criar um Script em C# com o nome "Mover", com o código abaixo, e jogar no seu jogador.
- 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)
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 = 5.0f;
public bool podePular = true;
public LayerMask LayersNaoIgnoradas = -1;
private Rigidbody corpoRigido;
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 () {
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 < 1) {
indicePosic ++;
novaPosicX = posicInicial.x + indicePosic*QuantoMover;
}
else if (ponteiroX < 0 && indicePosic > -1) {
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));
}
}
}
este script funcionará se o seu personagem se mover para frente no eixo Z
Última edição por MarcosSchultz em Seg Ago 12, 2019 3:29 am, editado 3 vez(es)
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Poxa Marcos, valeu mesmo pelo tutorial era oque estava precisando pro meu jogo!!
Agora só preciso mudar umas coisas pq meu jogo é em 2D e a câmera é de cima, e tirar o pulo.. Com esse script já é um grande avanço!
Obrigado cara!
Agora só preciso mudar umas coisas pq meu jogo é em 2D e a câmera é de cima, e tirar o pulo.. Com esse script já é um grande avanço!
Obrigado cara!
darkz- Iniciante
- PONTOS : 3321
REPUTAÇÃO : 0
Idade : 27
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
darkz escreveu:Poxa Marcos, valeu mesmo pelo tutorial era oque estava precisando pro meu jogo!!
Agora só preciso mudar umas coisas pq meu jogo é em 2D e a câmera é de cima, e tirar o pulo.. Com esse script já é um grande avanço!
Obrigado cara!
Tem algum vídeo mostrando um exemplo de gameplay do sistema que você está tentando fazer???
Posso ajustar o sistema para 2D
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
MarcosSchultz escreveu:
Tem algum vídeo mostrando um exemplo de gameplay do sistema que você está tentando fazer???
Posso ajustar o sistema para 2D
Não conheço nenhum vídeo com esse sistema que to tentando fazer...
Mas a pista e o movimento para a direita e a esquerda é estilo Subway Surfers, vai pra lá e pra cá, só que eu tava pensando em usar botões direito e esquerdo que pra mim parece mais fácil de programar.
darkz- Iniciante
- PONTOS : 3321
REPUTAÇÃO : 0
Idade : 27
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
da para fazer isto facilmente, basta colocar o comando dos:
if(ponteiroX > 0 && indicePosic < 1){}, etc
como se fossem botões, dentro de voids, e ai tira o if. Depois basta implementar nos botões. Consegue?
if(ponteiroX > 0 && indicePosic < 1){}, etc
como se fossem botões, dentro de voids, e ai tira o if. Depois basta implementar nos botões. Consegue?
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
- Código:
public void Direita {
(ponteiroX > 0 && indicePosic < 1) // aqui mostra "acessador get ou set esperado"
indicePosic ++;
novaPosicX = posicInicial.x + indicePosic*QuantoMover;
}
public void Esquerda {
(ponteiroX < 0 && indicePosic > -1) // aqui mostra "acessador get ou set esperado"
indicePosic --;
novaPosicX = posicInicial.x + indicePosic*QuantoMover;
}
Pelo oque entendi é assim? Não sei programar, sei o básico mesmo das coisas.
darkz- Iniciante
- PONTOS : 3321
REPUTAÇÃO : 0
Idade : 27
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
- Código:
public void Direita {
indicePosic ++;
novaPosicX = posicInicial.x + indicePosic*QuantoMover;
}
public void Esquerda {
indicePosic --;
novaPosicX = posicInicial.x + indicePosic*QuantoMover;
}
E para configurar os botões, basta seguir este tutorial:
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Está dando o mesmo problema..
Tentei colocar set {}, mas aparece outro erro no void, falando que "Esquerda"/"Direita": a propriedade ou o indexador não pode ter o tipo void.
darkz- Iniciante
- PONTOS : 3321
REPUTAÇÃO : 0
Idade : 27
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
você declarou esta variável pelo menos?
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
MarcosSchultz escreveu:você declarou esta variável pelo menos?
Sim, declarei.
- Código:
private int indicePosic;
darkz- Iniciante
- PONTOS : 3321
REPUTAÇÃO : 0
Idade : 27
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
- Código:
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(Rigidbody))]
public class Mover : MonoBehaviour {
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;
public LayerMask LayersNaoIgnoradas = -1;
private Rigidbody corpoRigido;
void Start(){
corpoRigido = GetComponent<Rigidbody> ();
corpoRigido.constraints = RigidbodyConstraints.FreezeRotation;
posicInicial = transform.position;
novaPosicX = posicInicial.x + indicePosic*QuantoMover;
indicePosic = 0;
podeMover = true;
}
void Update () {
estaNoChao = Physics.Linecast (transform.position, transform.position - Vector3.up, LayersNaoIgnoradas);
if (podeMover) {
DetectarMovimento ();
}
}
IEnumerator EsperarParaMover(float tempo) {
yield return new WaitForSeconds(tempo);
podeMover = true;
}
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
public void Direita {
indicePosic ++;
novaPosicX = posicInicial.x + indicePosic*QuantoMover;
}
public void Esquerda {
indicePosic --;
novaPosicX = posicInicial.x + indicePosic*QuantoMover;
}
void FixedUpdate(){
Vector3 proximaPosic = new Vector3 (novaPosicX, transform.position.y, transform.position.z);
transform.position = Vector3.Lerp (transform.position, proximaPosic, Time.deltaTime * 5);
}
}
darkz- Iniciante
- PONTOS : 3321
REPUTAÇÃO : 0
Idade : 27
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
- Código:
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(Rigidbody))]
public class Mover : MonoBehaviour {
private float novaPosicX;
[HideInInspector]public int indicePosic;
private bool podeMover;
private Vector3 posicInicial;
[Range(0.01f,1)]public float TempoParaMover = 0.15f;
[Range(1,5)]public int QuantoMover = 1;
public LayerMask LayersNaoIgnoradas = -1;
private Rigidbody corpoRigido;
void Start(){
corpoRigido = GetComponent<Rigidbody> ();
corpoRigido.constraints = RigidbodyConstraints.FreezeRotation;
posicInicial = transform.position;
novaPosicX = posicInicial.x + indicePosic*QuantoMover;
indicePosic = 0;
podeMover = true;
}
IEnumerator EsperarParaMover(float tempo) {
yield return new WaitForSeconds(tempo);
podeMover = true;
}
void FixedUpdate(){
Vector3 proximaPosic = new Vector3 (novaPosicX, transform.position.y, transform.position.z);
transform.position = Vector3.Lerp (transform.position, proximaPosic, Time.deltaTime * 5);
}
public void Direita(){
if (podeMover && indicePosic < 1) {
podeMover = false;
indicePosic++;
novaPosicX = posicInicial.x + indicePosic * QuantoMover;
StartCoroutine (EsperarParaMover (TempoParaMover));
}
}
public void Esquerda(){
if (podeMover && indicePosic > -1) {
podeMover = false;
indicePosic--;
novaPosicX = posicInicial.x + indicePosic * QuantoMover;
StartCoroutine (EsperarParaMover (TempoParaMover));
}
}
}
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Poxa cara, você é top dms, ajudou bastante!!! É isso que estava precisando, muito obrigado!!
Agora o resto do jogo tem tutorias no seu canal que vai me ajudar.
Valeu!
Agora o resto do jogo tem tutorias no seu canal que vai me ajudar.
Valeu!
darkz- Iniciante
- PONTOS : 3321
REPUTAÇÃO : 0
Idade : 27
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
qualquer coisa, posta ai... se quiser implementar mais movimentos, etc :D
darkz- Iniciante
- PONTOS : 3321
REPUTAÇÃO : 0
Idade : 27
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Marcos vc é o Cara!!! Gostaria que vc fizesse um tutorial de movimentação com Touch de personagem em 360 graus , tipo aqueles de apresentação. Ficaria bem legal.
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Muito obrigado Marcos!! Ajudou de mais, tava quebrando a cabeça pra fazer essa parte do touch! Acho que seria bacana você fazer um tuto em seu canal sobre touch em geral. Iria ajudar muita gente.
Continue assim!
Abraço!
Continue assim!
Abraço!
Hardencio- Avançado
- PONTOS : 3722
REPUTAÇÃO : 25
Áreas de atuação : Advergames and Casual Games
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Na verdade Marcos seu script não funcionou da maneira que eu queria no meu jogo, pois as dependendo da maneira como eu aplico o touch (sendo na unity, com o mouse ou direto do celular) o player avança mais do que deveria.
Queria que me ajudasse a implementar o sistema de touch swipe no meu script que estou usando agora, pois ele esta funcionando do modo que eu quero. Se puder me ajudar, criei um tópico mais cedo titulado como "Implementação de Touch em script modo Swipe", lá postei screenshot e o script que estou usando
Queria que me ajudasse a implementar o sistema de touch swipe no meu script que estou usando agora, pois ele esta funcionando do modo que eu quero. Se puder me ajudar, criei um tópico mais cedo titulado como "Implementação de Touch em script modo Swipe", lá postei screenshot e o script que estou usando
Hardencio- Avançado
- PONTOS : 3722
REPUTAÇÃO : 25
Áreas de atuação : Advergames and Casual Games
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Como exatamente está andando mais do que deveria??? Basta você ajustar a distancia na variável ué O.o
poderia especificar mais o problema?
poderia especificar mais o problema?
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Não andando mais do que deveria na questão de distancia...hahaha
O script esta definido para cada deslize na tela o objeto movimente o valor 1 em tal eixo correto?
O problema é que quando eu deslizo muito sobre a tela ele pula um movimento, ou seja é como ele fosse pro segundo movimento. Por exemplo: Existem 3 lugares pro player se mover na posição 0, -1, e 1..Se eu estou na -1 e deslizo muito sobre a tela o player passa pela posição 0 e vai para a 1 direto.
Eu quero que a cada deslize de dedo, dependente se for um deslize pequeno ou um deslize maior o pleyer se movimente apenas uma vez. Não sei se entendeu, vou colar aqui um print do game pra clarear melhor a ideia: https://i.imgur.com/X4k9dFO.png
O script esta definido para cada deslize na tela o objeto movimente o valor 1 em tal eixo correto?
O problema é que quando eu deslizo muito sobre a tela ele pula um movimento, ou seja é como ele fosse pro segundo movimento. Por exemplo: Existem 3 lugares pro player se mover na posição 0, -1, e 1..Se eu estou na -1 e deslizo muito sobre a tela o player passa pela posição 0 e vai para a 1 direto.
Eu quero que a cada deslize de dedo, dependente se for um deslize pequeno ou um deslize maior o pleyer se movimente apenas uma vez. Não sei se entendeu, vou colar aqui um print do game pra clarear melhor a ideia: https://i.imgur.com/X4k9dFO.png
Hardencio- Avançado
- PONTOS : 3722
REPUTAÇÃO : 25
Áreas de atuação : Advergames and Casual Games
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Hardencio escreveu:Não andando mais do que deveria na questão de distancia...hahaha
O script esta definido para cada deslize na tela o objeto movimente o valor 1 em tal eixo correto?
O problema é que quando eu deslizo muito sobre a tela ele pula um movimento, ou seja é como ele fosse pro segundo movimento. Por exemplo: Existem 3 lugares pro player se mover na posição 0, -1, e 1..Se eu estou na -1 e deslizo muito sobre a tela o player passa pela posição 0 e vai para a 1 direto.
Eu quero que a cada deslize de dedo, dependente se for um deslize pequeno ou um deslize maior o pleyer se movimente apenas uma vez. Não sei se entendeu, vou colar aqui um print do game pra clarear melhor a ideia: https://i.imgur.com/X4k9dFO.png
Testei aqui de novo e não obtive o erro O.o
Tem esta variável: TempoParaMover
que diz quanto tempo vai esperar entre cada movimento... talvez deva aumentar o valor dela
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Pois é Marcos, eu tentei mexer nessa variável e é possivel chegar em um bom resultado, mas não na ideal, eu prezo bastante uma boa jogabilidade nos jogos...até mesmo antes da arte. xD
Mas obrigado pela ajuda que vem dando.
Mas obrigado pela ajuda que vem dando.
Hardencio- Avançado
- PONTOS : 3722
REPUTAÇÃO : 25
Áreas de atuação : Advergames and Casual Games
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Valeu Marcos, esse script e fantástico, com um ajusto ficou perfeito.
Mas queria sabe se e possível aplicar o touch Screen a uma certa area da tela e não na tela todo?
Mas queria sabe se e possível aplicar o touch Screen a uma certa area da tela e não na tela todo?
matsuismael- Membro
- PONTOS : 3153
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Sim e possível vc pode usar o Rect.Contains
saiba mais
http://docs.unity3d.com/ScriptReference/Rect.Contains.html
saiba mais
http://docs.unity3d.com/ScriptReference/Rect.Contains.html
Weslley- Moderador
- PONTOS : 5729
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Valeu, vou estuda como fazer isso.weslleyFx escreveu:Sim e possível vc pode usar o Rect.Contains
saiba mais
http://docs.unity3d.com/ScriptReference/Rect.Contains.html
matsuismael- Membro
- PONTOS : 3153
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
queria saber como voce fes para arastar o dedo pra cima e o player pular? sei que é com tochCount mais como fes pra ir para o lado que deseja?
Eduardoro39- Avançado
- PONTOS : 3260
REPUTAÇÃO : 11
Idade : 24
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Eduardoro39 escreveu:queria saber como voce fes para arastar o dedo pra cima e o player pular? sei que é com tochCount mais como fes pra ir para o lado que deseja?
Ué, eu simplesmente separei o input do touch em X e Y, já que é um vector2.
O input é feito e retorna uma coordenada (X,Y). depois, eu apenas chequei se o deslocamento em Y era positivo ou negativo... X é o eixo horizontal, e Y é o eixo vertical.
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Pode me mostrar isso em um script em não entendi
Eduardoro39- Avançado
- PONTOS : 3260
REPUTAÇÃO : 11
Idade : 24
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
galera quando meu personagem vai para a parede ta pra parte do cenario q nao ta em uso como resolvo esse problema com a camera ?
thiagograssi- MembroAvançado
- PONTOS : 3376
REPUTAÇÃO : 43
Idade : 20
Áreas de atuação : Photoshop;
SketchUp;
C#(Learning);
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
a camera pega uma parte que nao é do cenario tipo a parede tente mover a camera mais para o lado contrario da parede que a camera esta pegandothiagograssi escreveu:galera quando meu personagem vai para a parede ta pra parte do cenario q nao ta em uso como resolvo esse problema com a camera ?
Eduardoro39- Avançado
- PONTOS : 3260
REPUTAÇÃO : 11
Idade : 24
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
so que meu boneco tem que ficar no meio da camera e se eu mover o beneco se destralizar se eu mover o bruneco junto com a camera ai mostra por fora a outra parede
thiagograssi- MembroAvançado
- PONTOS : 3376
REPUTAÇÃO : 43
Idade : 20
Áreas de atuação : Photoshop;
SketchUp;
C#(Learning);
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Marcos vou mostrar o meu problema quando eu arrasto para o lado esquerdo ele vai pra tras e quando arrasto para direita ele vai para frente como mostra nesse link = http://prntscr.com/cemp6q = Parado , http://prntscr.com/cemq5r = Arrastando para Esquerda
ele vai para frente enves de ir para o Lado sabe resolver aqui o script
ele vai para frente enves de ir para o Lado sabe resolver aqui o script
- Código:
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(Rigidbody2D))]
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 = 5.0f;
public bool podePular = true;
public LayerMask LayersNaoIgnoradas = -1;
private Rigidbody2D corpoRigido;
void Start()
{
corpoRigido = GetComponent<Rigidbody2D>();
posicInicial = transform.position;
novaPosicX = posicInicial.x + indicePosic * QuantoMover;
indicePosic = 0;
pulouR = false;
podeMover = true;
}
void Update()
{
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 < 1)
{
indicePosic++;
novaPosicX = posicInicial.x + indicePosic * QuantoMover;
}
else if (ponteiroX < 0 && indicePosic > -1)
{
indicePosic--;
novaPosicX = posicInicial.x + indicePosic * QuantoMover;
}
//DETECTAR EIXO Y
if (ponteiroY > 0.1f && podePular)
{
}
}
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);
}
}
Eduardoro39- Avançado
- PONTOS : 3260
REPUTAÇÃO : 11
Idade : 24
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Eduardoro39 escreveu:Marcos vou mostrar o meu problema quando eu arrasto para o lado esquerdo ele vai pra tras e quando arrasto para direita ele vai para frente como mostra nesse link = http://prntscr.com/cemp6q = Parado , http://prntscr.com/cemq5r = Arrastando para Esquerda
ele vai para frente enves de ir para o Lado sabe resolver aqui o script
- Código:
cara muda os eixos Y X Z até achar a posição correta ex: onde tá ponteiroY tenta mudar pro x nao funciona muda pro Z até achar a letra correnta
thiagograssi- MembroAvançado
- PONTOS : 3376
REPUTAÇÃO : 43
Idade : 20
Áreas de atuação : Photoshop;
SketchUp;
C#(Learning);
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Eduardoro39, você não está seguindo o tutorial.
Nele eu deixo restritamente especificado que o personagem deve mover-se para frente no eixo Z, isto fará a rotação ficar correta para os demais eixos.
Nele eu deixo restritamente especificado que o personagem deve mover-se para frente no eixo Z, isto fará a rotação ficar correta para os demais eixos.
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Sim eu fis mais o cenario que esta sendo instanciado ta indo para direçao contraria
quando instancia os Obstaculos ele vai para >> e o player nao
Esse aqui
quando instancia os Obstaculos ele vai para >> e o player nao
Esse aqui
- Código:
#pragma strict
var VetorPlataformas: GameObject[];
var PlataformaAtual: GameObject;
var QntFilhos: int;
var i: int;
var PosicaoFim: Vector3;
var indicePlataforma: int;
var indicePlataformaAtual: int;
var n: int;
function Start () {
PlataformaAtual = Instantiate(PlataformaAtual,transform.position+transform.up*-3+transform.forward *-3,Quaternion.identity);
indicePlataformaAtual = 0;
indicePlataforma = 0;
n =0;
}
function Update () {
if (Vector3.Distance(PlataformaAtual.transform.position,transform.position)<120)
{
PlataformaAtual.transform.name = "p"+n;
QntFilhos = PlataformaAtual.transform.GetChildCount();
for (i=0; i<QntFilhos; i++)
{
if (PlataformaAtual.transform.GetChild(i).name == "Fim")
{
PosicaoFim = PlataformaAtual.transform.GetChild(i).position;
break;
}
}
while (indicePlataformaAtual == indicePlataforma)
{
indicePlataforma = Random.Range(0,VetorPlataformas.Length);
}
indicePlataformaAtual = indicePlataforma;
PlataformaAtual = Instantiate(VetorPlataformas[indicePlataforma],
PosicaoFim,
Quaternion.identity);
n++;
}
}
Eduardoro39- Avançado
- PONTOS : 3260
REPUTAÇÃO : 11
Idade : 24
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Cara, refaça este script de spawn, só que em C#.
Trabalhar em um projeto de infinity runner misturando C# com java não vai dar muito certo não, principalmente por que este script precisará se comunicar diretamente com o player em momentos de colisão ou coisas do tipo.
Trabalhar em um projeto de infinity runner misturando C# com java não vai dar muito certo não, principalmente por que este script precisará se comunicar diretamente com o player em momentos de colisão ou coisas do tipo.
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
marcos como eu faço para colocar animaçoes nesse script pq o meu a unica animação q tem é dele pulando
thiagograssi- MembroAvançado
- PONTOS : 3376
REPUTAÇÃO : 43
Idade : 20
Áreas de atuação : Photoshop;
SketchUp;
C#(Learning);
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
thiagograssi escreveu:marcos como eu faço para colocar animaçoes nesse script pq o meu a unica animação q tem é dele pulando
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
ola marcos, boa noite, tenho uma duvida, teria como colocar o comando
corpoRigido.AddForce(Vector3.up * forcaDoPulo, ForceMode.Impulse);
apenas para ele mover para cima, sem ser para os lados, pois queria que ele movesse para os lados apenas quando estiver no chão.
e do jeito que esta ele pula para os lados sabe, e eu queria que ele só fosse pra cima
corpoRigido.AddForce(Vector3.up * forcaDoPulo, ForceMode.Impulse);
apenas para ele mover para cima, sem ser para os lados, pois queria que ele movesse para os lados apenas quando estiver no chão.
e do jeito que esta ele pula para os lados sabe, e eu queria que ele só fosse pra cima
Édipo- MembroAvançado
- PONTOS : 4009
REPUTAÇÃO : 62
Idade : 36
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Édipo escreveu:ola marcos, boa noite, tenho uma duvida, teria como colocar o comando
corpoRigido.AddForce(Vector3.up * forcaDoPulo, ForceMode.Impulse);
apenas para ele mover para cima, sem ser para os lados, pois queria que ele movesse para os lados apenas quando estiver no chão.
e do jeito que esta ele pula para os lados sabe, e eu queria que ele só fosse pra cima
Da sim, basta fazer um comando de "isGrounded" e permitir o deslocamento horizontal apenas quando este ground for true, mas isto vai se aplicar ao seu jogo?
Olhe o subway por exemplo, tem muitas situações aonde é necessário ir para o lado ainda estando no ar... MUITAS MESMO
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
-entendo o que vc disse, e vc tem razão na questão do jogo subway surfers, mas tipo a minha questão é que nesse script que vc compartilhou com a gente, se vc arrastar o dedo de um canto para o outro da tela na horizintal, e só ir um pouquinho pra cima, ele ja pula indo pro lado, e eu queria tipo restringir mais isso, tipo se eu arrastar para o lado e levantar um pouco o dedo ele vai somente para o lado, e pular somente quando eu arrastar o dedo para cima mesmo, tipo restringir o angulo de arrasto do dedo entende??
eu tentei fazer essa restrição de angulo do swap para os lados e deu certo que foi uma beleza, eu fiz assim...
mas pra cima (pulando) ta uma canceira viu, nada de resultado positivo até agora :\
hehehe
vlw
eu tentei fazer essa restrição de angulo do swap para os lados e deu certo que foi uma beleza, eu fiz assim...
- Código:
if (ponteiroX > 0 && indicePosic < 1) {
if (ponteiroY < 0.5f)
{
indicePosic ++;
novaPosicX = posicInicial.x + indicePosic*QuantoMover;
}
}
else if (ponteiroX < 0 && indicePosic > -1) {
if (ponteiroY < 0.5f)
{
indicePosic --;
novaPosicX = posicInicial.x + indicePosic*QuantoMover;
}
}
mas pra cima (pulando) ta uma canceira viu, nada de resultado positivo até agora :\
hehehe
vlw
Édipo- MembroAvançado
- PONTOS : 4009
REPUTAÇÃO : 62
Idade : 36
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
cara, difícil... basicamente o sistema teria que ser quase todo reformulado, para seguir outras regras de Input.
Usando o AddForce você simplesmente faz a adição do impulso no momento do toque... para dar este efeito que você quer, o Input tem que ser extremamente limitado, mas pelo que eu testei aqui, acaba comprometendo muito a "fluidez" com que os comandos são aceitos.
Talvez você deva aumentar o tempo que é passado para o IENumerator de DetectarMovimento
Troque de 0.5 para 1, 1.5, etc...
Usando o AddForce você simplesmente faz a adição do impulso no momento do toque... para dar este efeito que você quer, o Input tem que ser extremamente limitado, mas pelo que eu testei aqui, acaba comprometendo muito a "fluidez" com que os comandos são aceitos.
Talvez você deva aumentar o tempo que é passado para o IENumerator de DetectarMovimento
- Código:
StartCoroutine (EsperarParaPular(0.5f));
Troque de 0.5 para 1, 1.5, etc...
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Marcos, tem como fazer esse tutorial mas o personagem movendo no eixo x, um jogo 2D
lelouchsdky- Avançado
- PONTOS : 2970
REPUTAÇÃO : 21
Áreas de atuação : Cursando Licenciatura em computação
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
UOU! PARABÉNS MARCOS! MUITO LEGAL E TOPER! SUCESSO! :affraid: :lol!:MarcosSchultz escreveu:Fala galera, elaborei este script simples que permite mover o seu jogador com Touch, como também com o Mouse, no estilo subway surfers... para jogos do tipo infinity runner
Basta criar um Script em C# com o nome "Mover", com o código abaixo, e jogar no seu jogador.
- 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 = 5.0f;
public bool podePular = true;
public LayerMask LayersNaoIgnoradas = -1;
private Rigidbody corpoRigido;
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 () {
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 < 1) {
indicePosic ++;
novaPosicX = posicInicial.x + indicePosic*QuantoMover;
}
else if (ponteiroX < 0 && indicePosic > -1) {
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));
}
}
}
este script funcionará se o seu personagem se mover para frente no eixo Z
Gabriel César O- Profissional
- PONTOS : 3988
REPUTAÇÃO : 217
Idade : 23
Áreas de atuação : (ESTUDANDO SEGUNDO GRAU), (FUÇANDO NO UNITY)){
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
PESSOAL PARA COMPLEMENTAR AQUI TEM UM SCRIPT PARA FAZER O SEU OBJETO SE MOVER PARA FRENTE NO EIXO AZUL! O SCRIPT É EM Java Script
de o nome de "Frente" copie, cole e jogue em seu objeto! pronto!
de o nome de "Frente" copie, cole e jogue em seu objeto! pronto!
- Código:
#pragma strict
var velocidadeObjeto: float;
function Start () {
}
function Update () {
velocidadeObjeto = 1*Time.deltaTime;
transform.Translate(0,0,velocidadeObjeto);
}
Gabriel César O- Profissional
- PONTOS : 3988
REPUTAÇÃO : 217
Idade : 23
Áreas de atuação : (ESTUDANDO SEGUNDO GRAU), (FUÇANDO NO UNITY)){
Respeito as regras :
Como retirar movimentos nas diagonais?
Como eu faço para que o personagem não vá para cima e para um do lados ao mesmo tempo? Porque nesse scripteu posso mover na diagonal e o personagem segue pro lado e pula. Só que eu preciso que se eu puxar muito pra cima, mesmo que puxe pro lado também, ele só pule. Igual subway surfers. Ou o cara pula ou muda a posição. Não acontece as duas coisas ao mesmo tempo. Alguém pode me ajudar?
FabioBRPA- Iniciante
- PONTOS : 2919
REPUTAÇÃO : 3
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
FabioBRPA escreveu: Como eu faço para que o personagem não vá para cima e para um do lados ao mesmo tempo? Porque nesse scripteu posso mover na diagonal e o personagem segue pro lado e pula. Só que eu preciso que se eu puxar muito pra cima, mesmo que puxe pro lado também, ele só pule. Igual subway surfers. Ou o cara pula ou muda a posição. Não acontece as duas coisas ao mesmo tempo. Alguém pode me ajudar?
Você pode lidar com o input "Up" do dedo no touch... fazendo alguma ação acontecer só quando o dedo sai da tela.
Quando o dedo sair da tela, você compara quanto deslocou em X e quanto deslocou em Y... o eixo que tiver o maior deslocamento, será a ação do jogador.
Sabe fazer isto?
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Já fiz isso, só que não fica legal ter que soltar para poder mover, fica muito demorado, ai eu baixei o subway surfers e percebi que nele não pecisava soltar após arrastar pra movimentar. Apenas arrasta e o carinha já pula. Fica bem mais fácil de jogar. E ai chega a minha dúvida... pq já tentei comprar se x > y . Só que não deu certo Mas talvez eu fiz da forma errada. Poderia me ajudar com esse script? Obrigado
FabioBRPA- Iniciante
- PONTOS : 2919
REPUTAÇÃO : 3
Respeito as regras :
Re: [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Ah acabei de resolver o problema! Eu criei duas variáveis bool: pular = ( absY > AbsX ) usei o Mathf.Abs(float value). Bool andar = ( X > Y) ai eu coloquei no if de detectar o movimento de andar e coloquei a variável pra verificar, também na de pular ai prestou muito bem! Espero que ajude alguém! Vlw
FabioBRPA- Iniciante
- PONTOS : 2919
REPUTAÇÃO : 3
Respeito as regras :
Página 1 de 2 • 1, 2
Tópicos semelhantes
» [TUTORIAL] Mover objetos com o mouse, estilo Amnesia
» Script de Mover - Estilo Subway Surfs
» [TUTORIAL] Mover um Rigidbody com TOUCH
» [TUTORIAL] Mover câmera em 2D com TOUCH
» [TUTORIAL] Mover um botão do UI com touch e aumentar o tamanho
» Script de Mover - Estilo Subway Surfs
» [TUTORIAL] Mover um Rigidbody com TOUCH
» [TUTORIAL] Mover câmera em 2D com TOUCH
» [TUTORIAL] Mover um botão do UI com touch e aumentar o tamanho
Página 1 de 2
Permissões neste sub-fórum
Não podes responder a tópicos