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
Answer by lgarczyn · Jan 23, 2020 at 04:05 AM
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.
Your answer
 
 
             Follow this Question
Related Questions
How can I make a ball roll when using Vector3.MoveTowards? 0 Answers
Rigidbody2D.Cast() against mutiple colliders with a single Rigidbody2D 0 Answers
Rigidbody2D.rotation unclear behaviour 0 Answers
[UNET] Rigidbody physics sync 0 Answers
How Calculation a new rotate on circle2d when add torque 0 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                