One-dimensional characters are boring precisely because they’re either completely good or completely bad. Watch a bad James Bond movie (such as “A View to a Kill”) and you can see one-dimensional heroes (James Bond) and villains. That helps create a boring story. Now watch a good movie and you’ll notice something interesting. The “good” characters often have some negative trait and the “bad” characters often have some positive trait.
In “Star Wars,” Hans Solo is one of the good guys, yet he starts out as a devious smuggler who guns down a bounty hunter in a bar. Luke is also the hero but he’s timid and naive where he’s unable to protect himself in a seedy bar. To make good characters more likable, show us their weak points. That helps make them more human and thus more relatable.
Nobody can relate to the super human antics of James Bond in bad movies like “A View to a Kill” where he can run around being shot at and he doesn’t even break a sweat in his tuxedo. Compare that version of James Bond to the version in “Skyfall” where James Bond is an over-the-hill agent with slowing reflexes and he needs to prove to himself that he still deserves to be an agent.
Just as your good characters need to expose some negative traits, so must your villains reveal some positive traits. Hannibal in “Silence of the Lambs” may be a cannibalistic serial killer, but he’s also fascinating because he’s so well mannered and intelligent. Those positive traits make him appealing while also making him more devious and dangerous.
The terrorist leader in “Die Hard” is also well-dressed, well-mannered, and highly intelligent. That makes him admirable despite his callousness towards killing anyone who gets in his way. Make a villain too evil for no reason and that villain gets boring. Make a villain likable in some way and now that makes the villain appear harder to hate because he or she is also likable. This dual appeal to our sense of right and wrong helps make this kind of likable villain seem even deadlier to the hero.
The point is that if you make your good guys somewhat negative and your villains somewhat positive, you turn them from one-dimensional stereotypes into real people, and that makes them far more memorable, which makes your story far more appealing as well.