Пример #1
0
        /// <summary>
        /// Return the specified GameObject back to the ObjectPool.
        /// </summary>
        /// <param name="instantiatedObject">The GameObject to return to the pool.</param>
        /// <param name="originalInstanceID">The instance ID of the original GameObject.</param>
        private void DestroyLocal(GameObject instantiatedObject, int originalInstanceID)
        {
            // This GameObject may have a collider and that collider may be ignoring the collision with other colliders. Revert this setting because the object is going
            // back into the pool.
            Collider instantiatedObjectCollider;

            if ((instantiatedObjectCollider = Utility.GetComponentForType <Collider>(instantiatedObject)) != null)
            {
                LayerManager.RevertCollision(instantiatedObjectCollider);
            }
            instantiatedObject.SetActive(false);
            instantiatedObject.transform.parent = transform;

            Stack <GameObject> pool;

            if (m_GameObjectPool.TryGetValue(originalInstanceID, out pool))
            {
                pool.Push(instantiatedObject);
            }
            else
            {
                // The pool for this GameObject type doesn't exist yet so it has to be created.
                pool = new Stack <GameObject>();
                pool.Push(instantiatedObject);
                m_GameObjectPool.Add(originalInstanceID, pool);
            }

#if ENABLE_MULTIPLAYER
            // NetworkServer.Unspawn will pool the object on the clients through the ClientUnspawnHandler.
            if (isServer && m_NetworkSpawnedGameObjects.Contains(instantiatedObject))
            {
                NetworkServer.UnSpawn(instantiatedObject);
            }
#endif
        }
Пример #2
0
        /// <summary>
        /// The object doesn't have any health or shield left and should be deactivated.
        /// </summary>
        private void Deactivate()
        {
            Collider objCollider;

            if ((objCollider = Utility.GetComponentForType <Collider>(m_GameObject)) != null)
            {
                LayerManager.RevertCollision(objCollider);
            }

            m_GameObject.SetActive(false);
        }
Пример #3
0
 /// <summary>
 /// Revert any object collisions after the component is disabled.
 /// </summary>
 private void OnDisable()
 {
     LayerManager.RevertCollision(m_Collider);
 }