How can I get the 2D Position of a 3D gameObject

How Can i retrieve a 2D screenspace position for a 3D gameobject?

I'm trying to have a floating GUI.Label rollover identifying the object under the mouse position.

Camera.WorldToScreenPoint(position : Vector3)

Keep in mind, Screen space has Y space going from bottom (0) to top (screen.height). GUI space y values go from top (0), to bottom (screen.height).

Although for hover effects on geometry you may want to use MonoBehaviour.OnMouseOver instead, and then just sample the mouse position.

Here is An OnMouseOver() version that will hover a label over the mouse of the object under the mouse, I went with this one because there is an apparent tradeoff between using a Raycast check and the OnMouseOver, in that the raycast can still be triggered while you are clicking through a GUI, whereas the OnMouseOver stuff takes care of that for you?

using UnityEngine;
using System.Collections;

public class RolloverLabel : MonoBehaviour
{
    private bool ShowRollover;
    private Rect objRect;
    private Vector2 MousePos;
    //move it away from the mouse cursor
    public Vector3 offset = new Vector3 (16, 16, 0);

    void Start()
    {
        ShowRollover = false;
        objRect = new Rect(0, 0, 200, 35);
        MousePos = new Vector2(0, 0);
    }

    void OnMouseEnter() { ShowRollover = true; }
    void OnMouseExit() { ShowRollover = false; }

    void OnGUI()
    {
        if (ShowRollover)
        {
            //this will place the label on the objects local 0,0
            //objPos = Camera.main.WorldToScreenPoint(transform.position);

            //this will place the label on the mouse cursor
            MousePos = Input.mousePosition + offset;
            objRect.x = MousePos.x;

            objRect.y = Mathf.Abs(MousePos.y - Camera.main.pixelHeight);
            GUI.Label(objRect, gameObject.name);
        } 
    }
}