J'ai écrit un prototype de quelque chose comme ça. J'ai créé des ressources qui ressemblaient à ceci:
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.