Formen im Spiel zusammenschnappen


8

Ich versuche herauszufinden, wie man Formen zusammenschnappt, die der Player möglicherweise auf einer Leinwand bewegt.

Geben Sie hier die Bildbeschreibung ein

Wenn sich das Quadrat dem anderen Objekt nähert, möchte ich diese Form (bei einer bestimmten Nähe) hineinziehen und sie perfekt entlang der Objektkante einrasten lassen.

Regeln:

  • Nur wenn die Kanten parallel zueinander sind
  • Wenn ein untergeordnetes Quadrat (das gezogen wird) halb so groß ist wie das übergeordnete Quadrat (das angefahren wird), kann der Mittelpunkt der Kante des übergeordneten Quadrats bestimmen, ob das untergeordnete Quadrat entweder nach links / rechts / oben / unten einrastet

Geben Sie hier die Bildbeschreibung ein

Hat jemand so etwas getan? Ich benutze C # und Unity. Prost.

Antworten:


7

Ich habe einen Prototyp von so etwas geschrieben. Ich habe einige Ressourcen erstellt, die so aussahen:

Geben Sie hier die Bildbeschreibung ein

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.

Geben Sie hier die Bildbeschreibung ein


Vielen Dank für eine schön illustrierte Antwort - ich habe eine Frage :), die vordefinierten Fangpunkte, sind diese Punkte, deren Nähe Sie überprüfen? Wenn sie sich dann in der Nähe befinden, wird das grüne Kästchen angezeigt. Wenn Sie jetzt loslassen, ist das Einrasten dann abgeschlossen.
Dolyth

1
Ja, die grünen Kästchen zeigen an, dass ein Fang verfügbar ist und wo er einrastet. Der Collider befindet sich in demselben Bereich und wird verwendet, um zu bestimmen, ob Sie fangen können oder nicht. Ich strahle vier Punkte aus, während ich ein Teil aktiv bewege, um festzustellen, ob wir einen Fangpunkt überlappen oder nicht - und wenn ja, wie nah sind wir diesem Objekt.
Jgallant

Wie werden die grünen Kästchen angezeigt, wenn Sie einrasten? Haben Sie alle Skripte irgendwo in Github? Vielen Dank, Melissa
MContributor
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.