[RESOLVIDO] Arrastar e conectar
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Arrastar e conectar
Boa noite, eu fiz um sistema de arrastar e conectar inclusive de um tutorial de um video (esse: https://www.youtube.com/watch?v=EohhGbRgNds) daqui. E tô quebrando a cabeça com uma duvida... eu quero que o objeto se conecte não só a um ponto, mas a qualquer ponto disponivel na cena. Tô usando o
igual no video, mas não queria criar uns 20
- Código:
public Transform conector;
igual no video, mas não queria criar uns 20
- Código:
public Transform
andersontfc- Iniciante
- PONTOS : 1831
REPUTAÇÃO : 0
Respeito as regras :
Re: [RESOLVIDO] Arrastar e conectar
Voce cria uma array de Transforms.
E entao é só colocar todos seus conectores na array
- Código:
public Transform[] conectores
E entao é só colocar todos seus conectores na array
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Arrastar e conectar
É eu já tentei array só que ele retorna esse erro "Transform[]' does not contain a definition for 'position' and no accessible extension method 'position' accepting a first argument of type 'Transform[]' could be found (are you missing a using directive or an assembly reference?)"Pokedlg escreveu:Voce cria uma array de Transforms.
- Código:
public Transform[] conectores
E entao é só colocar todos seus conectores na array
andersontfc- Iniciante
- PONTOS : 1831
REPUTAÇÃO : 0
Respeito as regras :
Re: [RESOLVIDO] Arrastar e conectar
Voce tem que fazer um loop for para que pegue todos conectores, tente assim:
caso nao entendeu avise, ou mande o script o script para eu poder te ajudar
- Código:
public Transform[] conectores;
//em alguma void...
for(int i = 0; i<conectores.Length;i++)
{
// agora voce podera usar o transform.position
// em vez de utilizar conectores.position, use conectores[i].position
}
caso nao entendeu avise, ou mande o script o script para eu poder te ajudar
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Arrastar e conectar
Pokedlg escreveu:Voce tem que fazer um loop for para que pegue todos conectores, tente assim:
- Código:
public Transform[] conectores;
//em alguma void...
for(int i = 0; i<conectores.Length;i++)
{
// agora voce podera usar o transform.position
// em vez de utilizar conectores.position, use conectores[i].position
}
caso nao entendeu avise, ou mande o script o script para eu poder te ajudar
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(Rigidbody2D))]
public class MoverMapa : MonoBehaviour
{
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;
private BoxCollider2D _boxCollider2D;
// Start is called before the first frame update
void Start()
{
_rigidbody2D = transform.root.GetComponent<Rigidbody2D>();
_rigidbody2D.gravityScale = 1f;
_boxCollider2D = GetComponent<BoxCollider2D>();
}
// Update is called once per frame
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.2f);
}
if(distancia < 0.01f){
estaConectado = true;
transform.root.position = conector.position;
_boxCollider2D.enabled = !_boxCollider2D.enabled;
}
}
}
}
andersontfc- Iniciante
- PONTOS : 1831
REPUTAÇÃO : 0
Respeito as regras :
Re: [RESOLVIDO] Arrastar e conectar
entendi, acredito que com o loop for nao funcionaria, pois voce nao está percorrendo todos conectores, mas sim tentando detectar qual o conector mais proximo.
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Arrastar e conectar
É já quebrei a cabeça e nem sei mais o que fazerPokedlg escreveu:entendi, acredito que com o loop for nao funcionaria, pois voce nao está percorrendo todos conectores, mas sim tentando detectar qual o conector mais proximo.
andersontfc- Iniciante
- PONTOS : 1831
REPUTAÇÃO : 0
Respeito as regras :
Re: [RESOLVIDO] Arrastar e conectar
tente assim:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(Rigidbody2D))]
public class MoverMapa : MonoBehaviour
{
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;
private BoxCollider2D _boxCollider2D;
// Start is called before the first frame update
void Start()
{
_rigidbody2D = transform.root.GetComponent<Rigidbody2D>();
_rigidbody2D.gravityScale = 1f;
_boxCollider2D = GetComponent<BoxCollider2D>();
}
// Update is called once per frame
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){
for(int i = 0; i< conector.Length;i++){
distancia = Vector2.Distance(transform.root.position, conector[i].position);
if(distancia < distanciaMinimaConector){
transform.root.position = Vector2.MoveTowards(transform.root.position, conector[i].position, Time.deltaTime);
}
if(distancia < 0.01f){
estaConectado = true;
transform.root.position = conector[i].position;
}
}
}
}
}
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Arrastar e conectar
Não rolou
andersontfc- Iniciante
- PONTOS : 1831
REPUTAÇÃO : 0
Respeito as regras :
Re: [RESOLVIDO] Arrastar e conectar
Da algum erro? Voce colocou todos conectores na array?
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Arrastar e conectar
Assets\Scripts\MoveObject.cs(144,92): error CS0021: Cannot apply indexing with [] to an expression of type 'Transform'Pokedlg escreveu:Da algum erro? Voce colocou todos conectores na array?
Assets\Scripts\MoveObject.cs(139,42): error CS1061: 'Transform' does not contain a definition for 'Length' and no accessible extension method 'Length' accepting a first argument of type 'Transform' could be found (are you missing a using directive or an assembly reference?)
recebo isso como erro
andersontfc- Iniciante
- PONTOS : 1831
REPUTAÇÃO : 0
Respeito as regras :
Re: [RESOLVIDO] Arrastar e conectar
Voce esqueceu de transformar conector em array:
Voce precisa deixar ele assim, e depois no inspector ir linkando todos os conectores da sua cena
- Código:
public Transform[] conector;
Voce precisa deixar ele assim, e depois no inspector ir linkando todos os conectores da sua cena
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Arrastar e conectar
O script não deu erro mas infelizmente não funcionouPokedlg escreveu:Voce esqueceu de transformar conector em array:
- Código:
public Transform[] conector;
Voce precisa deixar ele assim, e depois no inspector ir linkando todos os conectores da sua cena
andersontfc- Iniciante
- PONTOS : 1831
REPUTAÇÃO : 0
Respeito as regras :
Re: [RESOLVIDO] Arrastar e conectar
Cara funcionou sim pqp. É que seu código não tinha a redução da velocidade do tigidbody. Deu certinho muito obrigado mesmo!Pokedlg escreveu:Voce esqueceu de transformar conector em array:
- Código:
public Transform[] conector;
Voce precisa deixar ele assim, e depois no inspector ir linkando todos os conectores da sua cena
andersontfc- Iniciante
- PONTOS : 1831
REPUTAÇÃO : 0
Respeito as regras :
Re: [RESOLVIDO] Arrastar e conectar
Assim verdade me desculpe, é que eu peguei seu codigo pra testar e tirei a desativaçao desses componentes e na hr de mandar aqui esqueci de colocar de volta.
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] NAO ARRASTAR CAMERA QUANDO O INVENTARIO ESTIVER ABERTO
» [RESOLVIDO] Problema ao arrastar imagens, músicas ou modelos 3D para a UNITY
» Conectar ao wifi
» Conectar ao servidor
» esquema de arrastar e soltar
» [RESOLVIDO] Problema ao arrastar imagens, músicas ou modelos 3D para a UNITY
» Conectar ao wifi
» Conectar ao servidor
» esquema de arrastar e soltar
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos