Try to think only about what will make your game easier to write, and not what is considered good practice by the OOP methodology. Those two often conflict.
at last, folks are getting a clue! big +1 on that!
I'd say they only conflict if you are trying to use the wrong methodology, or you have some misconception about it...
For example, I don't see how anything in "OOP methodology" says that "Unit" absolutely can't know about "World".
I'm guessing the misconception here is that OOP says that everything should be hierarchically organised from "higher level" to "lower level".
That's just not true. Objects often need to know about each other, and be part of a family of siblings on the same level of abstraction.
I'm totally in favor of making your program easy to write, understand and modify though.
But that's where some methodology can help. Just make sure to use the right tool for the job...
And don't blindly follow patterns just because you read about it in some book or blog.
Maybe "World" is a bit too vague to be very useful as an abstraction, it will likely contain many subsystems, and "Unit" probably only need access to a few of these subsystems. Your code might be easier to reason about if you only give Unit access to these subsystems.
TL;DR: I think it's fine to let Unit know about World, but it can certainly be improved