public bool SetTransform(Vector2 position, Quaternion rotation) #endif { Box2DXDebug.Assert(_world._lock == false); if (_world._lock == true) { return true; } if (IsFrozen()) { return false; } _xf.rotation = rotation; //_xf.R = rotation; _xf.position = position; _sweep.C0 = _sweep.C = _xf.TransformPoint(_sweep.LocalCenter); #if USE_MATRIX_FOR_ROTATION _sweep.A0 = _sweep.A = rotation.GetAngle(); #else _sweep.A0 = _sweep.A = rotation.eulerAngles.z * Mathf.Deg2Rad; #endif bool freeze = false; for (Fixture f = _fixtureList; f != null; f = f.Next) { bool inRange = f.Synchronize(_world._broadPhase, _xf, _xf); if (inRange == false) { freeze = true; break; } } if (freeze == true) { _flags |= BodyFlags.Frozen; _linearVelocity = Vector2.zero; _angularVelocity = 0.0f; // Failure return false; } // Success _world._broadPhase.Commit(); return true; }