I've been programming against SimSpark. It's the open-source simulation engine behind the RoboCup 3D Simulated Soccer League.
It's extensible for different simulations. You can plug in your own sensors, actuators and models using C++, Ruby and/or RSG (Ruby Scene Graph) files.
I don't know if it's the best simulator, but I've enjoyed using it.
EDIT In response to Arkapravo's comment.
I have written a .NET API for writing your own RoboCup 3D agents called TinMan.
There are a bunch of videos on YouTube of simulated 3D soccer matches. This is one of my favourites.
RoboCup 2010 is taking place this week in Singapore, though unfortunately I won't be able to make it.
RoboCup 3D runs on a physical simulation engine called SimSpark. It has a comprehensive Wiki with lots of information explaining how it all works.
My agent is still quite primitive, so I don't have anything published about it just yet. There are plenty of open source agent implementations in different languages if you're interested.