There are so many forum posts about the Unity CrossPlatformInput feature not working after being dragged into a scene. There's also the single touch controller having a habit of moving into the bottom left corner and not coming back .. luckily they're easy to fix!

Making the input .. work.

This is a pain but also useful, the main reason input doesn't work is the lack of an EventSystem in the scene.
To add one of these head to GameObject -> UI -> EventSystem

Now try using your controls.

Sicky Joystick

If you're using the MobileSingleStickControll you might notice that once you start touching the controls the UI image will jump into the bottom left corner, no matter how you set the anchors.
This is due to the script not caching the start position correctly, luckily the fix is simple.

Open up Joystick.cs
Look for

void Awake() and replace with void Start()

Then load your game again and test. The stick should now bounce back to the centre once you let go.

It's still not working!

Are you sure you've replaced your Input calls to CrossPlatformInputManager and added using UnityStandardAssets.CrossPlatformInput to your controller script?