Accrocher des formes ensemble dans le jeu

8

J'essaie de comprendre comment assembler des formes ensemble, le joueur peut se déplacer sur une toile.

entrez la description de l'image ici

À mesure que le carré s'approche de l'autre objet, je veux tirer cette forme (étant donné une certaine proximité) et le faire s'emboîter parfaitement le long du bord de cet objet.

Règles:

  • Seulement si les bords sont parallèles les uns aux autres
  • Si un carré enfant (en le faisant glisser) fait la moitié de la taille du carré parent (en étant approché), le milieu du bord du carré parent peut déterminer si l'enfant s'accroche à gauche / droite / haut / bas

entrez la description de l'image ici

Quelqu'un a-t-il fait quelque chose comme ça? J'utilise c # et l'unité. À votre santé.

Dolyth
la source

Réponses:

7

J'ai écrit un prototype de quelque chose comme ça. J'ai créé des ressources qui ressemblaient à ceci:

entrez la description de l'image ici

Donc, fondamentalement, cet objet "ShipPart" a des points d'accrochage prédéfinis. Ces quatre collisionneurs vous aideront à déterminer si vous essayez de mettre un objet en place ou non.

Ensuite, j'ai créé une classe ShipPart, qui contient des éléments tels que:

//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 ;

Il contient également des fonctions et des propriétés pour faciliter le glisser-déposer et vérifier l'état des ShipParts voisins.

Une fonction importante est la fonction Attach (), qui connectera ce ShipPart à votre Ship.

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);
}

Enfin, la classe Navire garde une trace de votre pièce principale, de toutes les pièces jointes, de toutes les données des navires sont gérées ici. Vous pouvez diffuser des rayons pour les pièces de navire de cette classe. Vérifiez la pièce que vous faites actuellement glisser pour voir si l'un des collisionneurs entre en collision avec d'autres pièces.

En cas de collision, vérifiez si la rotation se situe dans votre seuil spécifié, puis enclenchez-la en place.

C'est en fait beaucoup plus compliqué à expliquer que je ne le pensais. Faites-moi savoir si vous avez des questions et je développerai tout ce dont vous avez besoin d'aide.

entrez la description de l'image ici

jgallant
la source
Merci pour une réponse bien illustrée - j'ai une question :), les points d'accrochage prédéfinis, sont ces points dont vous vérifiez la proximité? Puis quand ils sont proches, la boîte verte apparaît .. ce qui signifie que si vous relâchez maintenant, le claquement est alors fait?
dolyth
1
Oui, les cases vertes sont pour indiquer qu'un composant logiciel enfichable est disponible, et où il se déclenchera. Le collisionneur existe dans cette même zone, et c'est ce qui est utilisé pour déterminer si vous pouvez accrocher ou non. Je diffuse quatre spots tout en déplaçant activement une pièce pour déterminer si nous chevauchons un point d'accrochage ou non - et si nous le sommes, à quelle distance sommes-nous de cet objet.
jgallant
comment faire apparaître les cases vertes lorsque vous enclenchez? Avez-vous tous les scripts quelque part dans github? Merci, Melissa
MContributor