Could you post a link to the ‘sidescroller’ prefab that you’re using? I checked the site, but wasn’t sure where to look for it.
As for your problem, it seems you have a couple of options: use ‘real’ physics to effect the rotation, or fake it.
To use real physics, you’d probably need to use a sphere collider, and use a joint or some code in your script to constrain the object to the xy plane. To move, you’d apply forces in the - and + x directions. You’d also need to set up your physics materials so that there was sufficient friction to cause the object to roll in a realistic manner.
Now, I’ve never tried doing anything like this with PhysX, so I can’t tell you whether this is really feasible (maybe someone else can comment on that). You could certainly give it a try though.
If that doesn’t work, another option would be to fake it. For this method, you’d also use a sphere constrained to the XY plane, but you’d use frictionless surfaces (and maybe disable rotation for the object as well).
Then, attach a child game object to the player object, and make this object the visual representation. In Update() or FixedUpdate(), measure the distance traveled since the last update. The direction of rotation can be determined from the direction of linear motion, and the amount of rotation (in radians) can be computed as ‘distance_traveled / player_radius’. You can then use the Transform.Rotate() function to apply the rotation, as described earlier.
If the player can jump or otherwise become ‘ungrounded’, you might want to detect that case and handle the rotation differently. For example, when the player is ungrounded, you could just keep the last computed angular velocity, or you could decrease the angular speed over time.