Problem when respawning a rigidbody in the desired position using rigidboy.position.
There is a delay of one frame when we call setActive (true) and its position is set immediately after, which is expected when we apply vector3 to rigidbody.position.
Consider the script
public class TesteRigidBodyWarp : MonoBehaviour {
public Rigidbody targetRigidBody;
void Update ()
{
if (Input.GetKeyDown(KeyCode.Q))
{
if (targetRigidBody.gameObject.activeInHierarchy)
{
targetRigidBody.gameObject.SetActive(false);
}
else
{
targetRigidBody.gameObject.SetActive(true);
targetRigidBody.position = Random.insideUnitCircle * 4.0f;
}
}
if (Input.GetKeyDown(KeyCode.A))
{
if (targetRigidBody.gameObject.activeInHierarchy)
{
targetRigidBody.gameObject.SetActive(false);
}
else
{
targetRigidBody.position = Random.insideUnitCircle * 4.0f;
targetRigidBody.gameObject.SetActive(false);
}
}
}
}
The rigidbody does not set its position if the object is not active, as in the KeyCode.A example.
In the example of KeyCode.Q, the position of the gameobject is updated with the delay of one frame, so that it is possible to see for a brief moment the object in the last position it was in when setActive (false) was last called.
Knowing rigidboy.position is more efficient than transform.position, how should we proceed to restore an inactive rigidbody the good way?
Your answer
Follow this Question
Related Questions
How to make a ball able to go anywhere on my "field"?? 0 Answers
Rigidbody local position constraints 2 Answers
Rigidbody.position: How can i make my player to not leave the field 0 Answers
Grappling gun line still has line when inactive 0 Answers
Set the Velocity to reach a position at a specific Timestamp 0 Answers