Rigidbody.MovePosition() is not working if transform.position is just changed

main question

This code works. ↓

private void FixedUpdate()
{
    Vector3 newPosition = new Vector3(0, 1, 0);
    GetComponent<Rigidbody>().MovePosition(newPosition);
}

This code not works. ↓

private void FixedUpdate()
{
    Vector3 newPosition = new Vector3(0, 1, 0);

    Vector3 oldPosition = transform.position;
    transform.position = newPosition;
    transform.position = oldPosition;

    GetComponent<Rigidbody>().MovePosition(newPosition);
}

I tested in Unity 2019.4 and 2020.3.

So, it seems Rigidbody.MovePosition() will not work if transform.position is just changed.
Why does this happen? What does the physics system do?


Another small problem and the reason for why I’m writing code above? ↓

I didn’t use much physics in my project. I changed position by setting transform.position.
I learn some physics, and think Kinematic and Rigidbody2D.MovePosition() is proper for me.
The old code is about several hundred lines. It would take some time to replace transform.position with Rigidbody2D.MovePosition().

So I think I can do the following to save time:

[1]save initial position,
[2]use old code to change position (transform.position),
[3]save new position ,
[4]restore old position,
[5]and finally use Rigidbody2D.MovePosition(newPosition) to change position.

But it turns out I can’t do this.
Any good idea?

You code will not work because you canno’t set transform.position while you try move object with rigidbody.
I think that it causes an conflict.