Onscreen objective pointer

I would like to create a gui texture which “points”(i.e. is placed at) a physical 3d object. I read alot about this line of code:


But when I implement it, it gives me strange values. At some stages it gives me something like 7500 for my x. The tiny game screen in the centre only displays a range of 0->0.9 for x and y, so any value above 1 is not renderable.

How can I implement WorldToScreenPoint correctly?

#pragma strict

public var objectiveIcon : GUITexture;
public var objectiveDescription : GUIText;
private var icon : GUITexture;
private var description : GUIText;

function Start ()
	icon = Instantiate(objectiveIcon);
	description = Instantiate(objectiveDescription);

function Update ()
	icon.transform.position = Camera.mainCamera.WorldToScreenPoint (this.transform.position);
	icon.transform.position.y = Screen.height - icon.transform.position.y;
	description.transform.position = Camera.mainCamera.WorldToScreenPoint (this.transform.position);
	description.transform.position.y = Screen.height - icon.transform.position.y;

function OnDestroy ()

WorldToScreenPoint() returns the positions in screen pixels. But a GUITexture lives in Viewport space. Viewport space starts at 0,0 in the bottom left corner and goes to 1,1 in the upper right. So to place a GUITexture you want to use Camera.WorldToViewportPoint().

transform.position = Camera.main.WorldToViewportPoint(target.transform.position);

Also with this logic, you don’t want to be adjusting the ‘y’ height of the position using screen coordinates as you do on line 19. You can adjust where to anchor the image using the PixelInset rect associated with the GUITexture. In the particular case of your logic above, you will want to set your anchor point to the middle top of the texture and then you will set your ‘y’ position to 1.0.