はうーん..あなたは、マップ上のいくつかの指定されたポイントを指す種類の矢印を作成したいです。種類の青本の矢印のように:
http://www.wowace.com/media/images/56/83/Bloodhound2.jpg
まあ、私はマスクされたミニマップの中心に「プレイヤー位置」オブジェクトを作成することから始めます。これをミニマップの中心とプレイヤーのためのUIオブジェクトの単純な参照として使用します(図の青と銀の矢印など)。次に、微積分を使用して、ミニマップの中心とマーカーとの間の角度を決定することができます。計算では、角度はarctan(y/x)に等しい。 2つの位置の間では、arctan [(最初のy - 秒y)/(最初のx - 秒x)]と等しくなります。 Unityでは、Mathfを使用してこれらの機能を実行できます。変数 'marker'がマーカーのRectTransformであるとしましょう。 'playerMarker'は、先ほど作成した最小値でのプレーヤーのUIオブジェクトのRectTransformです。
float yDistance = marker.anchoredPosition.y-playerMarker.anchoredPosition.y;
float xDistance = marker.anchoredPosition.x-playerMarker.anchoredPosition.x;
float angle = Mathf.Atan(yDistance/xDistance);
これで正しいアングルが得られたので、矢印をそのアングルの位置と回転に設定できます。我々はすぐに回転を設定することができます。矢印のRectTransform変数として 'arrow'を使用しましょう。
arrow.rotation = Vector3(angle * Mathf.Rad2Deg, 0, 0);
位置については、より多くの計算を使用する必要があります。私たちは矢印がplayerMarkから一定の距離だけ離れていることを望んでいますが、特定の角度にします。距離は、ミニマップの半径より少し小さくする必要があります。この距離を「矢印距離」と呼んでみましょう。矢印の位置を設定するには:
arrow.anchoredPosition.x = playerMarker.anchoredPosition.x + arrowDistance * Mathf.Cos(angle);
arrow.anchoredPosition.y = playerMarker.anchoredPosition.y + arrowDistance * Mathf.Sin(angle);
これはそうです。これはテストされていません。誰かが間違いを見つけたら、それを指摘してください。お役に立てれば!
マーカーの位置が固定されているのか、それとも回転していますか?固定されている場合は、円の中心から円の高さの半分または円の半径を追加するか、rect xの半分の幅とyの長さを追加することができます。いくつかの方法があります。 –
私は手伝っていますが、私はその質問を理解できません。 – Fattie
ここにRectTransformのドコがあります。かなり明確です。http://docs.unity3d.com/ScriptReference/RectTransform.html – Fattie