I need some help with my script. Im just a beginner and dont know whats happening.

So I need some help with a few things. First. let me explain what im try to achieve. Im trying to have a 1v1 minigame of sorts where one player uses WSAD and f to fire bullets and the other uses up,down,left,right arrows and space to shoot. The players are simply spheres and I want to keep it that way. I have all the controls down for movement and bullet behavior and such but when a player walks too close to a obstacle or wall they spaz around then slowly levitate into the air. This is a top down 3d game. And also i was trying to make the bullets fire based on the direction your looking or moving and I achieved in (you will see in my script) but the way it works makes both players move with arrow keys and WSAD because it uses vertical and horizontal movement. Is there anyway to fix this? Thanks so much! Again the problems are my sphere characters spaz out and fly away when they get close to a wall and Im trying to have 2 characters fire in the direction they are looking by using separate movement methods. if your curious whats on each of these players and walls/ obstacles there is a rigidbody and colliders on the players and walls/obstacles.

{
public float movementSpeed = 6f;
public GameObject bullet;

//Start is called before the first frame update
void Start()
{
    
}

// Update is called once per frame
void Update()
{
    ControllPlayer();
    if (Input.GetKeyDown(KeyCode.Space))
    {
        Instantiate(bullet, transform.position, transform.rotation);
    }      
}
void ControllPlayer()
{
    float moveHorizontal = Input.GetAxisRaw ("Horizontal");
    float moveVertical = Input.GetAxisRaw ("Vertical");

    Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
    transform.rotation = Quaternion.LookRotation(movement);


    transform.Translate (movement * movementSpeed * Time.deltaTime, Space.World);
}

}

What likely happening is that the players are clipping through the wall because you’re using the Translate function which basically teleports the objects. You need to use a method that regards physics such as AddForce or MoveTowards. Also be aware that Translate is in local space but AddForce and MoveTowards are in global space.