/// <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); }
/// <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; } }