I am instantiating an arrow object which travels in a certain direction affected by gravity. I want it to orient itself in the direction of travel, I got that part down no problem, however, I also want it to stop adjusting it's rotation so that it does NOT follow the direction of travel after it hits an object for the first time. This sort of seems to work, however, the rotation immediately sets itself to something different, so that there is a discontinued change in rotation, not really sure how to explain it, it sort of mirrors the rotation? here is a clip:

https://www.reddit.com/link/16m5mvf/video/9pu1w57lk2pb1/player

My Arrow script attached to the Rigidbody2D arrow object:

And finally, how I am spawning the arrow from the characterbody2d that is the player:

I am very new to Godot, coming over from Unity, any help with this, or just clarifications if I am doing something incorrectly would be hugely appreciated! 🙂

You're fighting against the physics if you manually set things like rotation on a RigidBody. Couple of things I would try:

  1. In _ready(), set lock_rotation = true. Then in _on_body_entered, set lock_rotation = false.

  2. The proper way (I think): Implement _integrate_forces and modify the transform from there.