Crossplatform Joystick cicular movement instead of square?

I’m using the CrossplatformInput Standard Assets plugin, and I noticed that the movement of joystick is actually square. What I want and most mobile games use are circular joystick. (The joystick button should always stay within the circle, while at 45deg). So the magnitude at 45deg is always 1, while the direction vector is (1/sqrt(2), 1/sqrt(2)).

Is there any easy way to do it?

Good at 0-90-180 deg
Bad at 45-135 deg

This seems to have the functionality you’re looking for: Unity 5 Virtual Joystick [Tutorial][C#] - Unity 3d - YouTube

I just hacked a acceptable solution, for anyone like me who has already implemented CrossPlatformInput but don’t wanna use something else for that:

Add into line91 in StandardAssets/CrossPlatformInput/Scripts/Joystick.cs:

// Hack: always have max magnitude equal to MovementRange only
newPos = Vector3.ClampMagnitude(newPos, MovementRange);