[TUTORIAL] Mover objetos 2D e conectar em lugares específicos
+3
henriquegames501
NKKF
MarcosSchultz
7 participantes
Página 1 de 1
[TUTORIAL] Mover objetos 2D e conectar em lugares específicos
Olá galera, trago-lhes mais um tutorial sobre Unity, desta vez em 2D. Neste tutorial eu explico como fazer uma espécie de quebra cabeças, onde é possível arrastar objetos em 2D e conectá-los em lugares específicos, e ainda, checar se todos estão em seus devidos lugares :D
Vídeo Explicando:
Código da peça:
Código para checar:
Vídeo Explicando:
Código da peça:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//requer um boxCollider2D
[RequireComponent(typeof(Rigidbody2D))]
public class MoveObject2D : MonoBehaviour { // funciona apenas com cameras ortograficas
Vector3 posicInicial;
Vector3 posicDestino;
Vector3 vetorDirecao;
Rigidbody2D _rigidbody2D;
bool estaArrastando;
float distancia;
[HideInInspector]
public bool estaConectado;
[Range(1, 15)]
public float velocidadeDeMovimento = 10;
[Space(10)]
public Transform conector;
[Range(0.1f, 2.0f)]
public float distanciaMinimaConector = 0.5f;
void Start () {
_rigidbody2D = transform.root.GetComponent<Rigidbody2D> ();
_rigidbody2D.gravityScale = 1;
}
void OnMouseDown(){
posicInicial = transform.root.position - Camera.main.ScreenToWorldPoint (Input.mousePosition);
_rigidbody2D.gravityScale = 0;
estaArrastando = true;
estaConectado = false;
}
void OnMouseDrag(){
posicDestino = posicInicial + Camera.main.ScreenToWorldPoint (Input.mousePosition);
vetorDirecao = posicDestino - transform.root.position;
_rigidbody2D.velocity = vetorDirecao * velocidadeDeMovimento;
}
void OnMouseUp(){
_rigidbody2D.gravityScale = 1;
estaArrastando = false;
}
void FixedUpdate(){
if (!estaArrastando && !estaConectado) {
distancia = Vector2.Distance (transform.root.position, conector.position);
if (distancia < distanciaMinimaConector) {
_rigidbody2D.gravityScale = 0;
_rigidbody2D.velocity = Vector2.zero;
transform.root.position = Vector2.MoveTowards (transform.root.position, conector.position, 0.02f);
}
if (distancia < 0.01f) {
estaConectado = true;
transform.root.position = conector.position;
}
}
}
}
Código para checar:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ChecarEstado : MonoBehaviour {
public bool completou;
float cronometro;
MoveObject2D[] objetos;
void Start () {
cronometro = 0;
completou = false;
objetos = FindObjectsOfType<MoveObject2D> ();
}
void Update () {
cronometro += Time.deltaTime;
if (cronometro >= 0.2f) { //5Hz
cronometro = 0;
int soma = 0;
for (int x = 0; x < objetos.Length; x++) {
if (objetos [x].estaConectado) {
soma++;
}
}
if (soma >= objetos.Length) {
completou = true;
}
}
}
}
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: [TUTORIAL] Mover objetos 2D e conectar em lugares específicos
gostei desse mais tem como adaptatar pra objetos 3d? pq tipo eu to tentando mais ta dando erro
henriquegames501- Iniciante
- PONTOS : 2243
REPUTAÇÃO : 3
Respeito as regras :
Re: [TUTORIAL] Mover objetos 2D e conectar em lugares específicos
henriquegames501 escreveu:gostei desse mais tem como adaptatar pra objetos 3d? pq tipo eu to tentando mais ta dando erro
Pra 3D é esse aqui soh: https://www.schultzgames.com/t7737-tutorial-mover-arremessar-e-girar-objetos-com-o-mouse#61602
Re: [TUTORIAL] Mover objetos 2D e conectar em lugares específicos
Cara que show, parabéns pelo trabalho esta ajudando muito, eu queria tirar uma dúvida, eu queria fazer um sistema tipo cartola de clicar no jogador e ir direto para o ponto que fica no campo eu sou leigo aqui em programação, tem como fazer no android isso, e mais pra galera que joga uma pelada, teria como fazer um tutorial assim ou um script pra ajudar, estou aprendendo agora, achei esse forum aqui pelo youtube aonde você tem o canal, ja sou inscrito la, parabés.
eljkb- Iniciante
- PONTOS : 2026
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Mover objetos 2D e conectar em lugares específicos
eljkb escreveu:Cara que show, parabéns pelo trabalho esta ajudando muito, eu queria tirar uma dúvida, eu queria fazer um sistema tipo cartola de clicar no jogador e ir direto para o ponto que fica no campo eu sou leigo aqui em programação, tem como fazer no android isso, e mais pra galera que joga uma pelada, teria como fazer um tutorial assim ou um script pra ajudar, estou aprendendo agora, achei esse forum aqui pelo youtube aonde você tem o canal, ja sou inscrito la, parabés.
Por favor, crie um tópico específico para esta dúvida...
A princípio é simples, basta um simples OnMouseDown e um targetPoint para cada objeto que pode ser selecionado... Depois, um Vector3.MoveTowards resolve tudo.
Re: [TUTORIAL] Mover objetos 2D e conectar em lugares específicos
Como faço pra ativar o script "ChecarEstado" apenas quando eu apertar um Button?
kelvys- Iniciante
- PONTOS : 1885
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Mover objetos 2D e conectar em lugares específicos
Muito bom, ajudou muito. Mas é possível usar esse sistema para criar uma malha quadriculada onde só é possível colocar objetos nas intercessões? Aforma que eu pensei seria replicar os conectores mas o código ficaria muito pesado e ainda sou leigo em programação. Você poderia me ajudar?
Batataaaa- Iniciante
- PONTOS : 1770
REPUTAÇÃO : 0
Idade : 23
Áreas de atuação : Programação em C#
Respeito as regras :
Re: [TUTORIAL] Mover objetos 2D e conectar em lugares específicos
Não estou conseguindo com que o objeto fique parado no conector. Alguma dica de como resolver esse problema?
Joenilton Saturnino- Iniciante
- PONTOS : 1762
REPUTAÇÃO : 1
Respeito as regras :
Tópicos semelhantes
» [TUTORIAL] Mover, Girar e lançar objetos com o mouse ( estilo Amnesia )
» [TUTORIAL] Spawn de objetos aleatorios em lugares aleatorios
» [TUTORIAL] Mover, arremessar e girar objetos com o mouse
» [TUTORIAL] Mover objetos com o mouse, estilo Amnesia
» [TUTORIAL] Girar objetos / mover de acordo com a rotação do Celular,tablet,etc
» [TUTORIAL] Spawn de objetos aleatorios em lugares aleatorios
» [TUTORIAL] Mover, arremessar e girar objetos com o mouse
» [TUTORIAL] Mover objetos com o mouse, estilo Amnesia
» [TUTORIAL] Girar objetos / mover de acordo com a rotação do Celular,tablet,etc
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos