/// <summary>
        /// Removes a rigidbody from the world if it exists.
        /// </summary>
        /// <param name="_body"></param>
        public void RemoveBody(ABRigidBody _body)
        {
            if (RigidBodies.Contains(_body))
            {
                RigidBodies.Remove(_body);
                return;
            }

            Debug.LogWarning("Attempted to remove a body from world that didn't exist.");
        }
示例#2
0
    /// <summary>
    /// Removes the bodies that have left the simulation boundaries.
    /// </summary>
    private void RemoveBodiesOutsideWorld()
    {
      if (Settings.Motion.RemoveBodiesOutsideWorld)
      {
        int numberOfRigidBodies = RigidBodies.Count;
        for (int i = numberOfRigidBodies - 1; i >= 0; i--)
        {
          var body = RigidBodies[i];
          if (body.IsSleeping)
            continue;

          var pose = body.Pose;
          if (pose.Position.IsNaN
              || pose.Orientation.IsNaN
              || !GeometryHelper.HaveContact(body.Aabb, World.Aabb))
          {
            RigidBodies.Remove(body);
          }
        }
      }
    }