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.

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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.