How to rotate an object around its 3 axis and translate it on 2 world axis so it looks like its a dice rolling?

Hi everyone, I am new to unity and I am trying to rotate a dice around its 3 axis and translate it at the same time on 2 axis.
The problem I am facing is if I rotate it without translating it works fine and same for translating without rotating, but once I do both together it starts rotating in a weird way and not around itself and it also doesn’t translate the way it is supposed to. Can someone help me figure out what I am missing here ? Thanks!

This what I am doing:

Vector3 center = gameObject.collider.bounds.center;
gameObject.transform.Translate(velocity);
gameObject.transform.RotateAround(center,Vector3.right,angularVelocity.x);
gameObject.transform.RotateAround(center,Vector3.up,angularVelocity.y); gameObject.transform.RotateAround(center,Vector3.forward,angularVelocity.z);

Well you are moving it in local space so that sorts your weird movement out. If the dice is modelled centrally then all of those rotate arounds are probably a bit much too, and you aren’t using Time.deltaTime so the rotation and movement isn’t frame rate independent.

Vector3 center = gameObject.collider.bounds.center; 
gameObject.transform.Translate(velocity * Time.deltaTime, Space.World);
gameObject.transform.RotateAround(center,Vector3.right,angularVelocity.x * Time.deltaTime); 
gameObject.transform.RotateAround(center,Vector3.up,angularVelocity.y * Time.deltaTime); 
gameObject.transform.RotateAround(center,Vector3.forward,angularVelocity.z * Time.deltaTime);

I would probably have done this, which might work for you:

var t = gameObject.transform;
t.position += velocity * Time.deltaTime;
var angle = t.eulerAngles;
angle += angularVelocity * Time.deltaTime;
t.eulerAngles = angle;

My guess is the issue is your use of the collider bounds to calculate the center of rotation. Is there a particular reason why you are using the center of the collider? Is it because the pivot point is not at the center of your dice? If so you can either 1) re-author in your 3D editor program, 2) Use the SetPivot editor script, or 3) make the visible object a child of an empty game object positioned at the correct pivot point. Once you do that, you can do something this to make them roll:

Transform.Rotate(angularVelocity * Time.deltaTime, Space.Self); 

I think changing your movement code to something like this solve the problem :
transform.translate( velocity*Time. deltatime,space.world );