[TUTORIAL] Mover um Rigidbody com TOUCH
+4
Giliarde
breno1086
BananaSmith
MarcosSchultz
8 participantes
Página 1 de 1
[TUTORIAL] Mover um Rigidbody com TOUCH
ATENÇÃO, A PRIMEIRA PARTE DO TUTORIAL SERVE NA UNITY 3 OU UNITY 4... SE VOCÊ JÁ ESTIVER USANDO A UNITY 5, UTILIZE OS SCRIPTS DA SEGUNDA PARTE DO TUTORIAL, QUE SÃO ESPECIFICAMENTE DIRECIONADOS A UNITY 5, PARA EVITAR ERROS
Criei este script básico, ele divide a tela em 2 partes
lado esquerdo ( se manter pressionado move para a esquerda )
lado direito ( se manter pressionado move para a direita)
e tem um espaço livre em cima sem nenhum comando para acrescentar botoes de menu, etc...
para fazer funcionar é simples, adicione este script no seu Player ( ESTE SCRIPT É PARA JOGOS 3D )
( Seu player deve conter rigidbody, trave os eixos se for necessário )
Altere o valor da variavel "Forca" conforme a massa do seu rigidbody
Em jogos 2D, é bem parecido, muda apenas o comando de AddForce. Segue o script abaixo
( SCRIPT PARA JOGOS 2D )
altere o valor da variavel Forca e pronto
SE VOCÊ ESTIVER USANDO A UNITY 5:
Se estiver utilizando a Unity 5, use os scripts abaixo:
2º script:
Criei este script básico, ele divide a tela em 2 partes
lado esquerdo ( se manter pressionado move para a esquerda )
lado direito ( se manter pressionado move para a direita)
e tem um espaço livre em cima sem nenhum comando para acrescentar botoes de menu, etc...
para fazer funcionar é simples, adicione este script no seu Player ( ESTE SCRIPT É PARA JOGOS 3D )
- Código:
using UnityEngine;
using System.Collections;
public class Movimento : MonoBehaviour {
public float Forca = 11500f;
void Update (){
Rect Esquerda = new Rect (Screen.width / 2 - Screen.width / 2, Screen.height / 2-Screen.height / 3.3f, Screen.width / 2, Screen.height /1.2f);
Rect Direita = new Rect (Screen.width / 2 , Screen.height / 2-Screen.height / 3.3f, Screen.width / 2, Screen.height /1.2f);
foreach (Touch t in Input.touches) {
Vector2 vec = t.position;
vec.y = Screen.height - vec.y;
if (Esquerda.Contains (vec)) {
this.rigidbody.AddForce (-Time.deltaTime * Forca / 15, 0, 0, ForceMode.Acceleration);
}
if (Direita.Contains (vec)) {
this.rigidbody.AddForce (Time.deltaTime * Forca / 15, 0, 0, ForceMode.Acceleration);
}
}
}
}
( Seu player deve conter rigidbody, trave os eixos se for necessário )
Altere o valor da variavel "Forca" conforme a massa do seu rigidbody
Em jogos 2D, é bem parecido, muda apenas o comando de AddForce. Segue o script abaixo
( SCRIPT PARA JOGOS 2D )
- Código:
using UnityEngine;
using System.Collections;
public class Movimentos : MonoBehaviour {
public float Forca = 11500f;
void Update (){
Rect Esquerda = new Rect (Screen.width / 2 - Screen.width / 2, Screen.height / 2-Screen.height / 3.3f, Screen.width / 2, Screen.height /1.2f);
Rect Direita = new Rect (Screen.width / 2 , Screen.height / 2-Screen.height / 3.3f, Screen.width / 2, Screen.height /1.2f);
foreach (Touch t in Input.touches) {
Vector2 vec = t.position;
vec.y = Screen.height - vec.y;
if (Esquerda.Contains (vec)) {
this.rigidbody2D.AddForce (-Vector2.right*Forca* Time.deltaTime*4);
}
if (Direita.Contains (vec)) {
this.rigidbody2D.AddForce (Vector2.right*Forca* Time.deltaTime*4);
}
}
}
}
altere o valor da variavel Forca e pronto
SE VOCÊ ESTIVER USANDO A UNITY 5:
Se estiver utilizando a Unity 5, use os scripts abaixo:
- Código:
using UnityEngine;
using System.Collections;
public class NomeDoSeuScript : MonoBehaviour {
public float Forca = 11500f;
void Update (){
Rect Esquerda = new Rect (Screen.width / 2 - Screen.width / 2, Screen.height / 2-Screen.height / 3.3f, Screen.width / 2, Screen.height /1.2f);
Rect Direita = new Rect (Screen.width / 2 , Screen.height / 2-Screen.height / 3.3f, Screen.width / 2, Screen.height /1.2f);
foreach (Touch t in Input.touches) {
Vector2 vec = t.position;
vec.y = Screen.height - vec.y;
if (Esquerda.Contains (vec)) {
this.GetComponent<Rigidbody>().AddForce (-Time.deltaTime * Forca / 15, 0, 0, ForceMode.Acceleration);
}
if (Direita.Contains (vec)) {
this.GetComponent<Rigidbody>().AddForce (Time.deltaTime * Forca / 15, 0, 0, ForceMode.Acceleration);
}
}
}
}
2º script:
- Código:
using UnityEngine;
using System.Collections;
public class NomeDoSeuScript : MonoBehaviour {
public float Forca = 11500f;
void Update (){
Rect Esquerda = new Rect (Screen.width / 2 - Screen.width / 2, Screen.height / 2-Screen.height / 3.3f, Screen.width / 2, Screen.height /1.2f);
Rect Direita = new Rect (Screen.width / 2 , Screen.height / 2-Screen.height / 3.3f, Screen.width / 2, Screen.height /1.2f);
foreach (Touch t in Input.touches) {
Vector2 vec = t.position;
vec.y = Screen.height - vec.y;
if (Esquerda.Contains (vec)) {
this.GetComponent<Rigidbody2D>().AddForce (-Vector2.right*Forca* Time.deltaTime*4);
}
if (Direita.Contains (vec)) {
this.GetComponent<Rigidbody2D>().AddForce (Vector2.right*Forca* Time.deltaTime*4);
}
}
}
}
Última edição por MarcosSchultz em Ter Jun 07, 2016 8:46 pm, editado 1 vez(es)
Re: [TUTORIAL] Mover um Rigidbody com TOUCH
Tenho uma dúvida. Seu usar esse script e tentar usar o click do mouse para mover o objeto, vai dar certo????
BananaSmith- Membro
- PONTOS : 3419
REPUTAÇÃO : 6
Respeito as regras :
Re: [TUTORIAL] Mover um Rigidbody com TOUCH
Não, pois este Input é feito com um foreach sobre o touch do aparelho... Pode ver por esta linha:
Se quiser testar algo de android enquanto edita na Unity sem precisar ficar exportando, pode utilizar o Unity remote, conforme o vídeo :D
- Código:
foreach (Touch t in Input.touches) {
}
Se quiser testar algo de android enquanto edita na Unity sem precisar ficar exportando, pode utilizar o Unity remote, conforme o vídeo :D
Re: [TUTORIAL] Mover um Rigidbody com TOUCH
Obrigado!!!
BananaSmith- Membro
- PONTOS : 3419
REPUTAÇÃO : 6
Respeito as regras :
Re: [TUTORIAL] Mover um Rigidbody com TOUCH
como cria um controle pra fps?
breno1086- Membro
- PONTOS : 3410
REPUTAÇÃO : 1
Respeito as regras :
Re: [TUTORIAL] Mover um Rigidbody com TOUCH
Como fazer o personagem pular usando touch unity 5 2D?
Última edição por Giliarde em Ter Fev 16, 2016 12:04 am, editado 3 vez(es)
Giliarde- Iniciante
- PONTOS : 3220
REPUTAÇÃO : 1
Respeito as regras :
Re: [TUTORIAL] Mover um Rigidbody com TOUCH
Cara, depende do método de Input que você deseja colocar...
Vai usar rect no Update igual a esse tuto ai ou vai querer usar Canvas para fazer os botões??
Vai usar rect no Update igual a esse tuto ai ou vai querer usar Canvas para fazer os botões??
Re: [TUTORIAL] Mover um Rigidbody com TOUCH
Criei três GameObject e adicionei a cada um deles o Gui Texture, pois estou usando o Unity 5. Três GameObject, pois criei um para cada botão(pular, esquerda e direita), daí usei o seguinte código!
foreach (UnityEngine.Touch touch in Input.touches)
{
if(this.GetComponent<GUITexture>().HitTest(touch.position))
{
if(touch.phase != TouchPhase.Ended)
{
if(this.name == "btnDireita")
{
animator.SetBool ("Run", true);
http://animator.SetBool ("rumPlayer", true);
player.transform.Translate(Vector2.right * velocidade * Time.deltaTime);
player.transform.eulerAngles = new Vector2(0,0);
}
if(this.name == "btnEsquerda")
{
animator.SetBool ("Run", true);
http://animator.SetBool ("rumPlayer", true);
player.transform.Translate(Vector2.right * velocidade * Time.deltaTime);
player.transform.eulerAngles = new Vector2(0,180);
}
if((this.name == "btnCima") && (grouded == true)){
player.GetComponent<Rigidbody2D> ().AddForce(transform.up * force);
animator.SetBool("jumpPlayer",true);
grouded = false;
}else{
animator.SetBool("jumpPlayer",false);
}
}
if(touch.phase == TouchPhase.Ended)
{
animator.SetBool ("Run", false);
http://animator.SetBool("rumPlayer", false);
}
}
}
Já tentei de Algumas formas resolver o problema do pulo, mas não consegui. Como faço? Lembrando que o movimento está funcionando perfeitamente!
foreach (UnityEngine.Touch touch in Input.touches)
{
if(this.GetComponent<GUITexture>().HitTest(touch.position))
{
if(touch.phase != TouchPhase.Ended)
{
if(this.name == "btnDireita")
{
animator.SetBool ("Run", true);
http://animator.SetBool ("rumPlayer", true);
player.transform.Translate(Vector2.right * velocidade * Time.deltaTime);
player.transform.eulerAngles = new Vector2(0,0);
}
if(this.name == "btnEsquerda")
{
animator.SetBool ("Run", true);
http://animator.SetBool ("rumPlayer", true);
player.transform.Translate(Vector2.right * velocidade * Time.deltaTime);
player.transform.eulerAngles = new Vector2(0,180);
}
if((this.name == "btnCima") && (grouded == true)){
player.GetComponent<Rigidbody2D> ().AddForce(transform.up * force);
animator.SetBool("jumpPlayer",true);
grouded = false;
}else{
animator.SetBool("jumpPlayer",false);
}
}
if(touch.phase == TouchPhase.Ended)
{
animator.SetBool ("Run", false);
http://animator.SetBool("rumPlayer", false);
}
}
}
Já tentei de Algumas formas resolver o problema do pulo, mas não consegui. Como faço? Lembrando que o movimento está funcionando perfeitamente!
Giliarde- Iniciante
- PONTOS : 3220
REPUTAÇÃO : 1
Respeito as regras :
Re: [TUTORIAL] Mover um Rigidbody com TOUCH
Eu usei o script para Rigidbody 2D (Unity 5), esta funcionando, mas se manter pressionado ou ficar tocando um lado a velocidade dele vai aumentando, como faço para essa velocidade ser fixa, não quero que ela aumente. E também quero que o player se mova só quando tocar em um dos lados, no caso eu teria que usar o else? Como devo fazer?
darkz- Iniciante
- PONTOS : 3318
REPUTAÇÃO : 0
Idade : 27
Respeito as regras :
Re: [TUTORIAL] Mover um Rigidbody com TOUCH
em vez de AddForce, você pode usar velocity, por exemplo
Isto deixa a velocidade fixada em 5 no eixo X
quanto aos inputs, um simples else já resolve
- Código:
GetComponent<Rigidbody2D>().velocity = new Vector2(5,0);
Isto deixa a velocidade fixada em 5 no eixo X
quanto aos inputs, um simples else já resolve
Re: [TUTORIAL] Mover um Rigidbody com TOUCH
MarcosSchultz escreveu:quanto aos inputs, um simples else já resolve
Como seria esse else?
Obs.: To aprendendo ainda. :oops:
darkz- Iniciante
- PONTOS : 3318
REPUTAÇÃO : 0
Idade : 27
Respeito as regras :
Re: [TUTORIAL] Mover um Rigidbody com TOUCH
- Código:
using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour {
public float velocidade = 5;
private Rigidbody2D corpoRigido;
private Vector2 ProximaVelocidade;
void Start(){
corpoRigido = GetComponent<Rigidbody2D> ();
}
void Update (){
Rect Esquerda = new Rect (Screen.width / 2 - Screen.width / 2, Screen.height / 2-Screen.height / 3.3f, Screen.width / 2, Screen.height /1.2f);
Rect Direita = new Rect (Screen.width / 2 , Screen.height / 2-Screen.height / 3.3f, Screen.width / 2, Screen.height /1.2f);
foreach (Touch t in Input.touches) {
Vector2 vec = t.position;
vec.y = Screen.height - vec.y;
if (Esquerda.Contains (vec)) {
ProximaVelocidade = new Vector2 (1, 0);
} else if (Direita.Contains (vec)) {
ProximaVelocidade = new Vector2 (-1, 0);
} else {
ProximaVelocidade = new Vector2 (0, 0);
}
}
corpoRigido.velocity = Vector2.Lerp (corpoRigido.velocity, ProximaVelocidade*velocidade, Time.deltaTime*5);
}
}
Re: [TUTORIAL] Mover um Rigidbody com TOUCH
- Código:
using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour {
void Update (){
Rect Esquerda = new Rect (Screen.width / 2 - Screen.width / 2, Screen.height / 2-Screen.height / 3.3f, Screen.width / 2, Screen.height /1.2f);
Rect Direita = new Rect (Screen.width / 2 , Screen.height / 2-Screen.height / 3.3f, Screen.width / 2, Screen.height /1.2f);
foreach (Touch t in Input.touches) {
Vector2 vec = t.position;
vec.y = Screen.height - vec.y;
if (Esquerda.Contains (vec)) {
this.GetComponent<Rigidbody2D>().velocity = new Vector2(-5,0);
}
if (Direita.Contains (vec)) {
this.GetComponent<Rigidbody2D>().velocity = new Vector2(5,0);
}
}
}
}
Usando esse script, oque eu devo mudar ou adicionar para o player se mover só quando tocar no Rect Esquerda/Rect Direita
darkz- Iniciante
- PONTOS : 3318
REPUTAÇÃO : 0
Idade : 27
Respeito as regras :
Re: [TUTORIAL] Mover um Rigidbody com TOUCH
MarcosSchultz escreveu:Não, pois este Input é feito com um foreach sobre o touch do aparelho... Pode ver por esta linha:
Não consegui acessar o jogo pelo celular usando o video, o meu é Moto G 3 Geração, segui passo a passo mas no fim não funcionou =/
(Já add o code ao script)
---- EDIT ----
Fui em Build Setting e descobri que o Android não está selecionado e nem consigo selecionar, talvez seja esse o problema... só uma hipótese
Última edição por dfop02 em Qua Fev 24, 2016 8:18 pm, editado 1 vez(es)
dfop02- Avançado
- PONTOS : 3258
REPUTAÇÃO : 2
Idade : 27
Respeito as regras :
Re: [TUTORIAL] Mover um Rigidbody com TOUCH
MarcosSchultz escreveu:Más n é o que eu acabei de fazer???
O script que você mandou continuou a mesma coisa, quando toco pra ir pra esquerda ele vai pra esquerda mas ele continua indo mesmo tirando o dedo da tela, quero aprender o script que faço para ele parar de ir para um dos lados quando tiro o dedo da tela.
darkz- Iniciante
- PONTOS : 3318
REPUTAÇÃO : 0
Idade : 27
Respeito as regras :
Re: [TUTORIAL] Mover um Rigidbody com TOUCH
Estou estudando a possibilidade de implementar este sistema com a UI da unity... Retorno quando tiver novidades
Re: [TUTORIAL] Mover um Rigidbody com TOUCH
Como posso usar para colocar um botão com touch por exemplo?
Yuri Alexs- Membro
- PONTOS : 3174
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Mover um Rigidbody com TOUCH
Amigo, sou iniciante em Unity ainda e estou terminando um trabalho da minha faculdade, um jogo 2D, gostaria de saber como posso utilizar esse código para ter acesso ao restante da tela, e em qual componente tenho que colocar o script, no canvas ou no cenario? (tipo arrastar a tela para o lado e mostrar os botoes R, Q e W.
Imagem Da minha Tela
Imagem Da minha Tela
PabloDayvid- Iniciante
- PONTOS : 2987
REPUTAÇÃO : 0
Idade : 29
Respeito as regras :
Re: [TUTORIAL] Mover um Rigidbody com TOUCH
PabloDayvid escreveu:Amigo, sou iniciante em Unity ainda e estou terminando um trabalho da minha faculdade, um jogo 2D, gostaria de saber como posso utilizar esse código para ter acesso ao restante da tela, e em qual componente tenho que colocar o script, no canvas ou no cenario? (tipo arrastar a tela para o lado e mostrar os botoes R, Q e W.
Imagem Da minha Tela
Basta ler o tutorial passo por passo... eu explico como configurar, aonde colocar o script e tudo mais, tanto para jogos 2D, quanto para 3D, etc.
Tópicos semelhantes
» [TUTORIAL] Mover um Rigidbody com o mouse fazendo ele respeitar outros Rigidbody e suas massas
» [TUTORIAL] Mover câmera em 2D com TOUCH
» [TUTORIAL] Mover um botão do UI com touch e aumentar o tamanho
» [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
» Ajuda com Rigidbody eixo Y mover constante
» [TUTORIAL] Mover câmera em 2D com TOUCH
» [TUTORIAL] Mover um botão do UI com touch e aumentar o tamanho
» [TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
» Ajuda com Rigidbody eixo Y mover constante
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos