[2D] Get 0-359 compass angle player <--> object

The closest I could find on the answerhub was:

    float AngleBetweenMouseAndPlayer()
    {
        Vector3 v3Pos;
        float fAngle;

        //Convert the player to Screen coordinates
        v3Pos = Camera.main.WorldToScreenPoint(transform.position);
        v3Pos = Input.mousePosition - v3Pos;
        fAngle = Mathf.Atan2(v3Pos.y, v3Pos.x) * Mathf.Rad2Deg;
        if (fAngle < 0.0f) fAngle += 360.0f;
        return fAngle - 90f;
    }

I can rework this code to work for 2 object ↔ player.
However, in this code the north returns 0, the east -90, the south 180 (the only correct one), and the west 90 degrees…

I need a function that returns me (for 2D space):
0 if the other object is exactly north of the player.
90 if the other object is exactly east of the player.
180 if the other object is exactly south of the player.
270 if the other object is exactly west of the player.
And of course all values in between, but no negative values.

The following method will give you the signed angle between your vectors (between -180° and 180°)

Simply add 180° to the result

    float SignedAngleBetween( Vector3 a, Vector3 b, Vector3 n )
    {
        float angle = Vector3.Angle( a, b );
        float sign = Mathf.Sign( Vector3.Dot( n, Vector3.Cross( a, b ) ) );
        return angle * sign;
    }

The n vector is the normal vector to your surface facing up (don’t know the value for 2D games, Vector3.up I guess)

See Understanding Vector Arithmetic if you want to understand the mathematic notions involved :

http://docs.unity3d.com/Manual/UnderstandingVectorArithmetic.html