There are a few things you should do to optimise the shadows in your game:
Use lightmapping heavily to compute the shadows for static meshes. Unity has a builtin lightmapper. See http://docs.unity3d.com/Documentation/Manual/Lightmapping.html and http://docs.unity3d.com/Documentation/Manual/OptimizeForIntegratedCards.html.
The computation of dynamic lights have 3 main aspects and each one must be tweaked for performance: the light itself, the casters and the receivers.
To make a dynamic light, set Hard Shadows or Soft Shadows in it. However, the number of dynamic lights should be minimal since each one issue additional rendering for shadow projection. Also, Soft Shadows require a blur filter to ensure smoothness, which can impact the performance. Finally, the resolution of the shadow texture also affects performance. See http://docs.unity3d.com/Documentation/Manual/Shadows.html and http://docs.unity3d.com/Documentation/Manual/DirectionalShadowDetails.html.
To make a mesh receive or cast shadows, set Receive Shadows or Cast Shadows in the respective Renderer (BEWARE: by default these settings are on). However, the number of casters and receivers should also be minimal, since each caster or receiver in the "light frustum" must be rendered additional times. See http://docs.unity3d.com/Documentation/Manual/ShadowTroubleshooting.html.
Another related performance tweek is to use the Deferred Rendering Path instead of the Forward Rendering Path.
In summary:
- Bake light maps;
- Keep the number of dynamic lights to a minimum;
- Tweak the resolution of the shadow texture;
- Tweak the filter for Soft Shadows;
- Use Receive Shadows and Cast Shadows judiciously;
- Use the Deferred Rendering Path.