Unity is a very powerful engine for game development, much to the point that it has become a norm within the industry as much as the Unreal engine. To some, Unity seems intimidating but with a bit of advice and some self directed learning you can easily get the hang of it.
You can access the documentation here including manuals and the scripting reference
http://unity3d.com/support/documentation/Unity supports a number of languages such as C#, javascript and boo. If you are somewhat new to programming I'd suggest starting with javascipt then later moving on to C# once you have a few games under your belt. I say that mainly since there is more support in the community for javascript than C#.
FAQ
1. Isn't Unity a 3D engine? I want to make a 2D game.
A: You can make a 2D game easily. Simply restrict all movement to the axis' you want and apply textures onto game objects with Transparent -> cutout -> diffuse type (in other words your png will remove the sections of the game object where there is alpha). You can also animate the textures as long as its in a sprite sheet, though you will need to have a animation script set up. Go here to get started on sprite sheet animation
http://wiki.unity3d.com/index.php?title=Animating_Tiled_texture_-_Extended#JavaScript_-_AnimatedTextureExtendedUV.js 2. How much can I do without scripting?
A: Not much really, Unity does have standard open source assets and scripts you can use (such as 1st and 3rd person character controllers), but without scripting the most you could get is a 1st person game walking in a maze of unity boxes. Note that there is ONE way to avoid scripts in Unity but its a $150 unitypackage that emulates the Kismet system from UDK (Unreal Development Kit).
3. Is everything done in scripts?
A: Only if you want to do it the hard way. Unity allows you to access and reassign public variables in your scripts from the editor itself. There are a couple of traps here for beginners though:
Example for adjusting variables in the editor
public var walkSpeed : int = 0;
when this variable is applied in a movement script the player wouldn't move. Since we made it public we can use the editor.
FIRST make sure the script is either attached to a game object or a prefab(we'll discuss these later)
SECOND make sure the engine isn't in play mode. Unity actually uses 2 engines one for the editor and one for playing the game. When playing, if you alter a variable the change will not save. This can be useful for testing results of different values quickly, just be sure to record your values in a notepad and then change them in the editor mode.
Now we can discuss how prefabs work and why they are important. Lets say I want 100 cubes with movement scripts. I could spend a long time make 100 cubes and attaching the scripts individually OR I can make a prefab.
To make a prefab you can create a game object in the Hierarchy, then click and drag it into the project tab. From here I can attach my script and then just click and drag the prefab into my scene.
Now public vars and prefabs, what's so important? Well if I change a public var on a script attached to my original prefab, it will change that value for every instance of that prefab in the scene. If I change the value on an individual cube then it will only affect that one cube.
For example if I had 5 cubes instantiated from a prefab with a bouncing scripting holding a public variable called bounceSpeed. I could change the speed of all my cubes using the script on the prefab OR changing the variable on the cubes individually, I can have cubes bouncing at different speeds. In the future I may be posting my Crusher script for people to use freely which utilises this handy system.
Unity has all the tools there to design your own systems, go out there and make some amazing editor based scripts.
ASK ME STUFF AND I'LL DO MY BEST TO ANSWER