2016-03-23 11 views
0

Wie bekomme ich den Punkt des Inkreises am Punkt auf dem Quadrat in C# (Unity3d)? Ich mache Minikarte mit Kreismaske. Ich will Markierung von Süden in der Grenze der Karte. Ich kann max Koordinaten optimiert calc wenn Minimap Platz ist:Wie bekomme ich den Punkt des Inkreises am Punkt auf dem Quadrat in C# (Unity3d)

Rect mapRect = GetComponent<RectTransform>().rect; 
    point = Vector2.Max(point, mapRect.min); 
    point = Vector2.Min(point, mapRect.max);` 
+0

Ist die Position des Markers fest oder ist es eine Drehung? Wenn es fixiert ist, könnten Sie die Hälfte der geraden Höhe oder den Radius des Kreises von der Mitte des Kreises hinzufügen, oder Sie könnten die Hälfte der geraden Breite zum rect x und die Höhe zum y hinzufügen. Es gibt ein paar Wege. –

+0

Ich würde gerne helfen, aber ich kann die Frage nicht verstehen. – Fattie

+0

Hier ist der Doco für RectTransform, es ist ziemlich klar http://docs.unity3d.com/ScriptReference/RectTransform.html – Fattie

Antwort

1

Hmm .. Wenn ich Ihre Frage richtig verstanden habe, wollen Sie einen Pfeil der Art zu schaffen, die auf der Karte zu einem gewissen bestimmten Punkt verweist. Ein bisschen wie die blaue der Pfeil in dieser:

http://www.wowace.com/media/images/56/83/Bloodhound2.jpg

Nun, ich würde durch die Schaffung eines „Spielerposition“ Objekt in der Mitte des maskierten Minimap beginnen. Wir verwenden dies als einfache Referenz für das Zentrum der Minikarte und ein UI-Objekt für den Spieler, wie den blauen und silbernen Pfeil im Bild. Als nächstes können wir mithilfe von Kalkül den Winkel zwischen der Mitte der Minikarte und dem Marker bestimmen. In der Infinitesimalrechnung ist ein Winkelwinkel gleich arctan (y/x). Zwischen zwei Positionen ist es gleich arctan [(erstes y - zweites y)/(erstes x - zweites x)]. In Unity können wir Mathf verwenden, um diese Funktionen auszuführen. Nehmen wir an, die Variable 'marker' ist die RectTransform des Markers und 'playerMarker' ist die RectTransform des UI-Objekts des Spielers auf dem Minimalwert, den wir zuvor erstellt haben.

Jetzt, da wir den richtigen Winkel haben, können wir einen Pfeil als Position und Drehung dieses Winkels einstellen. Wir können sofort die Rotation einstellen. Lassen Sie uns 'Pfeil' als die RectTransform-Variable für unseren Pfeil verwenden.

arrow.rotation = Vector3(angle * Mathf.Rad2Deg, 0, 0); 

Für die Position müssen wir mehr Kalkül verwenden. Wir wollen, dass der Pfeil eine bestimmte Entfernung vom playerMarker entfernt ist, aber in einem bestimmten Winkel. Der Abstand sollte etwas kleiner als der Radius der Minikarte sein. Nennen wir diese Entfernung 'arrowDistance'. So um die Pfeilposition zu setzen:

arrow.anchoredPosition.x = playerMarker.anchoredPosition.x + arrowDistance * Mathf.Cos(angle); 
    arrow.anchoredPosition.y = playerMarker.anchoredPosition.y + arrowDistance * Mathf.Sin(angle); 

Und das sollte es sein. Dies wird nicht getestet. Wenn also jemand einen Fehler findet, weisen Sie ihn bitte darauf hin. Hoffe das hilft!

+0

Ich möchte die Positionen von Marker - "N" in Ihrem Bild (http://prntscr.com/aj8y4v - roter Rand). –

+0

oh. Erstellen Sie einfach ein neues UI-Textobjekt im Editor. Lege es oben auf den Kreis und lasse den Text 'N' sagen. Das ist viel viel einfacher hahah – Sokco

+0

Ich möchte, dass mein Spielobjekt in scnene (welches mein Süden ist) in Minikarte nachverfolgt wird. –

Verwandte Themen