GUI Element pointing toward object in world

Hi, I’m trying to pull off an interface arrow pointing toward an object in world space. The arrow is already on the location of the object and it also clamps to the edge of the screen, meaning it already indicates where the object is. My only problem is the rotation. I’ve tried using GUIUtility.RotateAroundPivot together with Vector2.Angle, but honestly I don’t really know if it can be done this way or if I’m just miscalculating the whole thing.

This is what I’m currently doing, which results in behaviour I can’t really explain.

					float TempAngle = Vector2.Angle(targetPos, ActualPos);
					GUIUtility.RotateAroundPivot(-TempAngle, targetPos);

With targetPos being the clamped WorldToScreenPoint of the object and ActualPos being the unclamped version. Anyone ever tried something like this before? I coudn’t find it anywhere.

It is a bit of example code that might help you. It assumes the right side of your texture is what is pointing. It rotates the specified texture (tex) around its middle. ‘pivot’ is in screen coordinates and is the position to place the texture. ‘target’ is the game object to follow. Initialize it through drag and drop or add code to Start to find the object:

#pragma strict

var tex : Texture2D;    // Texture to be rotated
var target : Transform; // GameObject to point to
var pivot : Vector2;    // Where to place the center of the texture

private var rect : Rect;
 
function Start() {
	rect = new Rect(pivot.x - tex.width * 0.5f, pivot.y - tex.height * 0.5f, tex.width, tex.height);
}
 
function OnGUI() {
	if (Event.current.type == EventType.Repaint) {
		var dir = Camera.main.WorldToScreenPoint(target.position);
		dir.y = Screen.height - dir.y;
		dir = dir - pivot;  
		var angle = Mathf.Atan2(dir.y, dir.x)  * Mathf.Rad2Deg;

		var matrixBackup = GUI.matrix;
		GUIUtility.RotateAroundPivot(angle, pivot);
		GUI.DrawTexture(rect, tex);
		GUI.matrix = matrixBackup;
	}
}