using UnityEngine; /// /// Drop this anywhere in your scene to spawn a humanoid enemy at that position. /// Configure the enemy type in the Inspector then hit Play. /// Delete this script after you've set up your enemies if you prefer manual placement. /// public class EnemySpawner : MonoBehaviour { public HumanoidEnemy.EnemyType enemyType = HumanoidEnemy.EnemyType.Grunt; [Header("Health Override (0 = use defaults)")] public float healthOverride = 0f; void Start() { SpawnEnemy(); } void SpawnEnemy() { GameObject enemyObj = new GameObject($"Enemy_{enemyType}"); enemyObj.transform.position = transform.position; enemyObj.transform.rotation = transform.rotation; // Add CharacterController (required by HumanoidEnemy) CharacterController cc = enemyObj.AddComponent(); cc.slopeLimit = 45f; cc.stepOffset = 0.5f; // Add health EnemyHealth health = enemyObj.AddComponent(); // Add enemy AI + model HumanoidEnemy enemy = enemyObj.AddComponent(); enemy.enemyType = enemyType; if (healthOverride > 0f) { health.maxHealth = healthOverride; health.currentHealth = healthOverride; } } void OnDrawGizmos() { // Show enemy position in editor switch (enemyType) { case HumanoidEnemy.EnemyType.Grunt: Gizmos.color = new Color(0.8f, 0.5f, 0.2f, 0.8f); DrawEnemyGizmo(1f); break; case HumanoidEnemy.EnemyType.Brute: Gizmos.color = new Color(0.8f, 0.1f, 0.1f, 0.8f); DrawEnemyGizmo(1.3f); break; case HumanoidEnemy.EnemyType.Runner: Gizmos.color = new Color(0.2f, 0.7f, 0.2f, 0.8f); DrawEnemyGizmo(0.9f); break; } } void DrawEnemyGizmo(float scale) { Vector3 pos = transform.position; // Body Gizmos.DrawCube(pos + Vector3.up * 1.15f * scale, new Vector3(0.45f, 0.6f, 0.25f) * scale); // Head Gizmos.DrawSphere(pos + Vector3.up * 1.65f * scale, 0.15f * scale); // Legs Gizmos.DrawCube(pos + Vector3.up * 0.4f * scale + Vector3.left * 0.12f, new Vector3(0.18f, 0.6f, 0.18f) * scale); Gizmos.DrawCube(pos + Vector3.up * 0.4f * scale + Vector3.right * 0.12f, new Vector3(0.18f, 0.6f, 0.18f) * scale); // Direction arrow Gizmos.color = Color.yellow; Gizmos.DrawRay(pos + Vector3.up * scale, transform.forward * 1.5f); } }