Ich habe einen Prototyp von so etwas geschrieben. Ich habe einige Ressourcen erstellt, die so aussahen:
Grundsätzlich hat dieses "ShipPart" -Objekt vordefinierte Fangpunkte. Mithilfe dieser vier Collider können Sie feststellen, ob Sie versuchen, ein Objekt zu fixieren oder nicht.
Als nächstes habe ich eine ShipPart-Klasse erstellt, die einige Dinge enthält wie:
//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 ;
Es enthält auch Funktionen und Eigenschaften, die beim Ziehen und Ablegen sowie beim Überprüfen des Status der benachbarten ShipParts helfen.
Eine wichtige Funktion ist die Attach () - Funktion, die dieses ShipPart mit Ihrem Schiff verbindet.
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);
}
Schließlich verfolgt die Schiffsklasse Ihr Kernstück, alle angehängten Teile, alle Schiffsdaten werden hier verwaltet. Sie können für Schiffsteile dieser Klasse Raycasts erstellen. Überprüfen Sie das Teil, das Sie gerade ziehen, um festzustellen, ob einer der Kollider mit anderen Teilen kollidiert.
Überprüfen Sie bei einer Kollision, ob die Drehung innerhalb des angegebenen Schwellenwerts liegt, und rasten Sie sie dann ein.
Dies ist tatsächlich viel komplizierter zu erklären, als ich gedacht hatte. Lassen Sie mich wissen, wenn Sie Fragen haben, und ich werde auf alles eingehen, bei dem Sie weitere Hilfe benötigen.