You can use invisible placeables to block movement in some circumstances. In others, where the player is exploiting a limitation of the engine, I’d probably engineer suitable unwanted results. For example, if they enter a room through a wall, you can catch that by placing a trigger just inside the doorway, and using that to put a local variable on the player. Then, place a trigger that covers the entire room, except for the area directly in front of the doorway. That way, when they enter the room without coming through the doorway, you’ll know it by checking for the variable when they step into the larger trigger. Then, make bad things happen to them! Such as “Oh no, as you were trying to wedge yourself through a small gap in the wall, you slipped and fell into the room, landing awkwardly on your <item/weapon/whatever>! You not only broke the item, but you’ve suffered severe injury and will probably die and turn to dust in here, forgotten and alone, an utterly forsaken soul lost to the ages. Oh well. Probably should’ve just used the door.”
Or some such. LOL.
As for seeing into adjacent rooms, I think an inverted black one-side box (so you can see ‘out’ but not ‘in’ could be made and placed over important rooms to prevent that from happening. Not sure I’ve seen that anywhere though…