コード例 #1
0
 /// <summary>
 /// Places a spawned entity in the scene.
 /// </summary>
 protected virtual void PlaceSpawnedEntity(SpawnedEntity spawnedEntity)
 {
     if (spawnedEntity == null)
     {
         return;
     }
     if (positionInfo.positionType == PositionInfo.PositionType.Radius)
     {
         PlaceSpawnedEntityInRadius(spawnedEntity);
     }
     else
     {
         PlaceSpawnedEntityInSpawnpoint(spawnedEntity);
     }
 }
コード例 #2
0
        /// <summary>
        /// Places an entity within the specified radius of the spawner.
        /// </summary>
        protected void PlaceSpawnedEntityInRadius(SpawnedEntity spawnedEntity)
        {
            var rand1    = UnityEngine.Random.Range(-positionInfo.radius, positionInfo.radius);
            var rand2    = UnityEngine.Random.Range(-positionInfo.radius, positionInfo.radius);
            var position = (positionInfo.plane == PositionInfo.Plane.X_Z)
                ? new Vector3(transform.position.x + rand1, transform.position.y, transform.position.z + rand2)
                : new Vector3(transform.position.x + rand1, transform.position.y + rand2, transform.position.z);
            var navMeshAgent = spawnedEntity.GetComponent <NavMeshAgent>();

            if (navMeshAgent != null)
            {
                navMeshAgent.Warp(position);
            }
            else
            {
                spawnedEntity.transform.position = position;
            }
            spawnedEntities.Add(spawnedEntity);
        }
コード例 #3
0
 /// <summary>
 /// Removes an entity from the spawnedEntities list.
 /// </summary>
 /// <param name="spawnedEntity"></param>
 protected virtual void RemoveSpawnedEntity(SpawnedEntity spawnedEntity)
 {
     if (spawnedEntity == null)
     {
         return;
     }
     spawnCount--;
     if (positionInfo.positionType == PositionInfo.PositionType.Radius)
     {
         // If using radius, just remove from list:
         spawnedEntities.Remove(spawnedEntity);
     }
     else
     {
         // If using spawnpoints, assign null to the list element.
         for (int i = 0; i < spawnedEntities.Count; i++)
         {
             if (spawnedEntities[i] == spawnedEntity)
             {
                 spawnedEntities[i] = null;
             }
         }
     }
 }
コード例 #4
0
        /// <summary>
        /// Places an entity at an available spawnpoint.
        /// </summary>
        protected virtual void PlaceSpawnedEntityInSpawnpoint(SpawnedEntity spawnedEntity)
        {
            // Get available positions:
            m_availablePositions.Clear();
            for (int i = 0; i < spawnedEntities.Count; i++)
            {
                if (spawnedEntities[i] == null)
                {
                    m_availablePositions.Add(i);
                }
            }
            if (m_availablePositions.Count == 0)
            {
                return;
            }

            // Move entity to a random available position:
            var index = m_availablePositions[UnityEngine.Random.Range(0, m_availablePositions.Count - 1)];

            spawnedEntities[index] = spawnedEntity;
            var spawnpoint = positionInfo.spawnpoints[Mathf.Min(index, positionInfo.spawnpoints.Length - 1)];

            if (spawnpoint != null)
            {
                var navMeshAgent = spawnedEntity.GetComponent <NavMeshAgent>();
                if (navMeshAgent != null)
                {
                    navMeshAgent.Warp(spawnpoint.transform.position);
                }
                else
                {
                    spawnedEntity.transform.position = spawnpoint.transform.position;
                }
                spawnedEntity.transform.rotation = spawnpoint.transform.rotation;
            }
        }
コード例 #5
0
 /// <summary>
 /// Invoked by a SpawnedEntity when it's disabled. Removes it from the spawnedEntities list.
 /// </summary>
 /// <param name="spawnedEntity"></param>
 protected virtual void OnSpawnedEntityDisabled(SpawnedEntity spawnedEntity)
 {
     RemoveSpawnedEntity(spawnedEntity);
 }
コード例 #6
0
 /// <summary>
 /// Despawns an entity.
 /// </summary>
 /// <param name="spawnedEntity"></param>
 protected virtual void DespawnEntity(SpawnedEntity spawnedEntity)
 {
     DestroyEntity(spawnedEntity.gameObject);
 }