Each time you run your unit tests, you save yourself the amount of time it would have taken to manually test your code.
The 30% to 50% of time you quote as being required to write your tests is also offset a great deal by the benefits of having a better (testable) software design.
Let's say it takes four times as long to write an automated test as it does to manually perform the test. That means that the fourth time you run your automated test, it pays for itself. Every time you run the automated test after that, it's free.
This holds true whether the test is an automated unit test, or an automated functional test. Not all functional tests can be automated, but many of them can. Plus, the automated test is more reliable than a person; it will run the test in exactly the same way, every time.
Having unit tests means that you can refactor the underlying implementation of a method (for performance or other reasons), and the unit tests will verify that the functionality of the method has not changed. This is especially true of TDD, where the unit test specifies the functionality of the method.