# 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.