Making The Z rotation always on 0 plz help

I’m very new to Unity and C#, my sprite he requires a kinematic rigid body to move around properly but if I made it a dynamic rigid body he moves around fine just when he shoots his Z rotation changes and he rotates I would like it to stay on dynamic just if someone could please help me with the code to make sure his Z rotation is always 0 that would be great also here is the code i use to move the “fish”

public float Speed;
public GameObject FirePoint;
public string Tag;

bool facingRight = true;

public void OnTriggerEnter2D(Collider2D Border)
{
    if (Border.gameObject.tag == Tag)
    {
        
        Debug.Log("TouchingBorder!");

        
    }
               

          
        }
void Update()
{
    

    Vector3 target = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    target.z = transform.position.z;
    transform.position = Vector3.MoveTowards(transform.position, target, Speed * Time.deltaTime/Mathf.Abs(transform.localScale.x));

    // using mousePosition and player's transform (on orthographic camera view)
    var delta = target - transform.position;

    if (delta.x >= 0 && !facingRight)
    { // mouse is on right side of player
       transform.localScale = new Vector3(
            Mathf.Abs(transform.localScale.x),
            transform.localScale.y,
            transform.localScale.z); // or activate look right some other way
        

        FirePoint.transform.Rotate(0f, -180f, 0f);

        facingRight = true;

    }
    else if (delta.x < 0 && facingRight)
    { // mouse is on left side
        transform.localScale = new Vector3(
        -Mathf.Abs(transform.localScale.x),
             transform.localScale.y,
             transform.localScale.z);  // activate looking left

        FirePoint.transform.Rotate(0f, 180f, 0f);

        facingRight = false;
       
    }

   
}

by the way, I watch a tutorial to get this code but I sort of understand of what it is doing
also please don’t refer me a link to the unity manual for rigid bodies

Same old advice, but don’t use the transform to move a rigidbody.


Since your rigidbody is kinematic, you need to do a few things:

  • Use FixedUpdate instead of Update

  • Add a private RigidBody2D variable called rb, to store the rigidbody of your object

  • Use a Vector2 for the target if you don’t use the z

  • change your movement code to this:

     // Get the movement magnitude this frame
     float deltaMove = Speed * Time.fixedDeltaTime / Mathf.Abs(transform.localScale.x);
     // Get the movement direction, but limited to your speed
     Vector2 targetDir = Vector2.ClampMagnitude(target - rb.position, deltaMove);
     // Move to the new position
     rb.MovePosition(rb.position + targetDir);
    

As for your rotation, note that

FirePoint.transform.Rotate(0f, -180f, 0f);

is exactly equivalent to

FirePoint.transform.Rotate(0f, 180f, 0f);

Rotating 180 degrees on an axis clockwise is the same as rotating 180 degrees counterclockwise.


The reason that your object is rotation on the z axis is not in this code though.