private void RemoveRef(BulletDisposableObject obj)
        {
            if (obj == null)
            {
                throw new ArgumentNullException(nameof(obj));
            }

            if (obj.Owner == null)
            {
                if (UserOwnedObjects.Contains(obj) == false)
                {
                    throw new Exception("Removing object that is not being tracked. " +
                                        "Object info: " + obj.GetType());
                }
                UserOwnedObjects.Remove(obj);
            }
        }
        private void AddRef(BulletDisposableObject obj)
        {
            if (obj == null)
            {
                throw new ArgumentNullException(nameof(obj));
            }

            if (obj.Owner == null)
            {
                if (UserOwnedObjects.Contains(obj))
                {
                    throw new Exception("Adding an object that is already being tracked. " +
                                        "Object info: " + obj.GetType());
                }
                UserOwnedObjects.Add(obj);
            }
        }