Juntando formas no jogo

8

Estou tentando descobrir como encaixar formas, o jogador pode se mover em uma tela.

insira a descrição da imagem aqui

À medida que o quadrado se aproxima do outro objeto, quero puxar essa forma (dada uma certa proximidade) e fazer com que ela se encaixe perfeitamente ao longo da borda dos objetos.

Regras:

  • Somente se as arestas estiverem paralelas umas às outras
  • Se um quadrado filho (sendo arrastado) tiver metade do tamanho do quadrado pai (sendo aproximado), o ponto médio da borda do quadrado pai poderá determinar se o filho encaixará à esquerda / direita / cima / baixo

insira a descrição da imagem aqui

Alguém já fez algo como isso? Eu estou usando c # e unidade. Felicidades.

dolyth
fonte

Respostas:

7

Eu escrevi um protótipo de algo assim. Criei alguns recursos parecidos com este:

insira a descrição da imagem aqui

Então, basicamente, esse objeto "ShipPart" possui pontos de snap predefinidos. Esses quatro coletores ajudarão a determinar se você está tentando encaixar um objeto no lugar ou não.

Em seguida, criei uma classe ShipPart, que contém algumas coisas como:

//Neighbor information
ShipPart Left, Right, Top, Bottom;

//current rotation
float Rotation;

//The ship core it is attached to
Ship Ship;

//The coordinates in references to the ship core
int X ;
int Y ;

Ele também contém funções e propriedades para ajudá-lo a arrastar e soltar e verificar o estado dos ShipParts vizinhos.

Uma função importante é a função Attach (), que conectará este ShipPart ao seu navio.

public void Attach(Ship ship, int x, int y)
{
    GetComponent<Rigidbody2D> ().isKinematic = true;

    Ship = ship;

    X = x;
    Y = y;

    transform.parent = Ship.transform;
    transform.position = Vector2.zero;
    transform.localPosition = new Vector2(x, -y);
}

Por fim, a classe Ship envia um registro de sua peça principal, todas as peças anexadas e todos os dados dos navios são gerenciados aqui. Você pode fazer radiodifusão para peças de navios nesta classe. Verifique a parte que você está arrastando no momento para ver se algum dos colididores está colidindo com outras partes.

Se houver uma colisão, verifique se a rotação está dentro do limite especificado e encaixe-a no lugar.

Isso é realmente muito mais complicado de explicar do que eu pensava. Deixe-me saber se você tiver dúvidas e eu irei detalhar o que você precisar de mais ajuda.

insira a descrição da imagem aqui

jgallant
fonte
Obrigado por uma resposta bem ilustrada - eu tenho uma pergunta :), os pontos de pressão predefinidos, são esses pontos que você está verificando quanto à proximidade? Então, quando eles estiverem próximos, a caixa verde aparecerá .. ou seja, se você soltar agora, o encaixe será feito?
dolyth 23/09/16
11
Sim, as caixas verdes indicam que um snap está disponível e onde ele será encaixado. O colisor existe nessa mesma área e é o que é usado para determinar se você pode encaixar ou não. Transmito quatro pontos ao mover ativamente uma peça para determinar se estamos sobrepondo um ponto de pressão ou não - e se estamos, quão próximos estamos desse objeto.
Jgallant # 23/16
como você faz com que as caixas verdes apareçam quando você está encaixando? Você tem todos os scripts no github em algum lugar? Obrigado, Melissa
MContributor