A determined modder can and will always modify any part of your game which runs on the users system. You can put obstacles in their way to make their life harder, but you can't stop them. Creating a hash of your assets can be countered by finding that hash in your executable and changing it too. When you encrypt your assets, people will find the decryption key and algorithm in your executable. When you obfuscate your executable, they will find a deobfuscator. You can buy an expensive license for a commercial anti-cheat tool and add it to your game, but these tools can't protect themselves from getting hacked. They are just software, and any software can be hacked when the hacker has access to them. For every ACT there is a hack which counters it.
Conclusion: It's futile.
But when your game is offline, then why bother? The cheaters are only cheating themselves. When they enjoy your game more when it provides no challenge at all, good for them. Let them have their "fun". They aren't hurting anyone except themselves.
However, when your game is online, it's something different. Cheaters can destroy the fun for any honest players who try to compete with them. The only good way to prevent cheating in a multiplayer game is by having an authoritative server which receives raw input from the clients, calculates all game mechanics itself and sends only those results to each client which it is supposed to know. That way the user can modify their client as much as they want. It won't help them when the server won't accept any illegal moves and won't give them any useful information the player isn't supposed to know.
There is, however, one family of cheats an authoritative server can't prevent: Automation. Be it aimbots in a FPS or a farmbot in an MMO - the only way to detect them is with heuristics or with observant moderators.