Innacurate Physics at lower framerates?

Hi Community, I am developing a mobile game in Unity for Android. The devices I have tested it on are the Galaxy Tab 4, Galaxy S4, Galaxy S5, and the Galaxy Note 4. The S5 and the Note 4 run it perfect, but the S4 and the Tab 4 have some major issues. On the S4 and the Tab 4, it is possible to glide through walls with ease. I have spend several nights trying to figure out this issue and just now figured it out. The Note 4 runs it at ~60FPS, the S5 at ~30, the S4 at ~10, and the Tab 4 at ~4. With this info, I thought the issue could be because of the framerate. By using Application.targetFrameRate and setting it to 10, all devices would walk through walls so I can confirm it has to do with the framerate. Is there any possible way to improve physics on lower framerates? Thanks

Uhm, if you use FixedUpdate for all continuous physics movement there shouldn’t be any differences except when the framerate is about 3 fps as this is the safety cap in case the device can’t keep up. By default the physics and FixedUpdate rate is 50 updates per second. This rate will be held up even when the visual framerate is only 10 frames per second. That simply means it does 5 fixedupdate calls every frame.

However if you move things in Update you basically bypass physics all together. You actually forcing objects to intersect and when the physics run the next time it might see the collision and try to fix it. However if the frame rate is low you would move in greater steps when using Update and deltaTime. So you can easily skip through walls.

You should give more details on how you actually move your objects.

Go to Edit->Project Settings->Physics.
Increase the Solver Iteration Count. The higher the value is, more acurate colldier result you will get. But beware, the higher this value is, the lower frame rate you will get. So you need to find a balance point.
Also you can tweaking Default Contact Offset. The higher this value is, the harder that colliders will go through each other.

Whilst this may seem annoying or unintuitive, Get all inputs every frame, and move the player in FixedUpdate(). Right now you are moving the player in Update. Physics updates in Fixed Update, so if your character has a rigidbody, you should move them in Fixed Update.

Well, I guess I fixed it. In my script, all the movement is inside the ControlPlayer function, which is called in the Update function. I switched the Update function to FixedUpdate and my problem mysteriously disappeared? If it works, it works I guess. Thanks all for answering!