I'm writing a fun game as a solidity contract and looking to generate somewhat random (or unpredictable numbers). I have researched this topic and am aware using an off chain oracle is the best practice for this. In my particular use case using an oracle such as chainlink will incur too much cost. Similarly using an approach that spans more than a single transaction might be more effort than it is worth (forcing the user to both do a play and possibly claim tx). Assuming there will be none or very little monetary reward for playing the game would the following approach be suitable.
Use block hash of previous block along with numerous other sources of numbers such as timestamp, balance of popular uniswap pairs, lending pools balance, weth total supply etc, essentially sourcing entropy from on chain sources.
I intend to only allow transactions from EOAs not contracts. My thinking is that in order for a user to guess what the random variable would be they would need to know the state of all the inputs and submit their tx before these change. I also intend to deploy on a chain that has a shorter blocktime than ethereum and generally produces a block every two seconds.
Is there much risk to my approach or anything I haven't considered?