public static void RestoreState(this Rigidbody rb, ActorFramework.RigidbodyState rigidbodyState) { //Debug.Log("Restored " + rb.gameObject.name + " to velocity: " + rigidbodyState.velocity.magnitude); rb.position = rigidbodyState.position; rb.rotation = rigidbodyState.rotation; rb.velocity = rigidbodyState.velocity; rb.angularVelocity = rigidbodyState.angularVelocity; rb.isKinematic = rigidbodyState.isKinematic; }
private void HandleSetPaused(bool value) { if (Rigidbody == null) { return; } if (value) { _savedState = new RigidbodyState(Rigidbody); Rigidbody.isKinematic = true; Rigidbody.velocity = Vector3.zero; Rigidbody.angularVelocity = Vector3.zero; Rigidbody.position = transform.position; Rigidbody.rotation = transform.rotation; Rigidbody.Sleep(); } else { Rigidbody.WakeUp(); Rigidbody.RestoreState(_savedState); } }