Files
OGG/Assets/Scripts/EnemySpawner.cs

82 lines
2.6 KiB
C#

using UnityEngine;
/// <summary>
/// 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.
/// </summary>
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<CharacterController>();
cc.slopeLimit = 45f;
cc.stepOffset = 0.5f;
// Add health
EnemyHealth health = enemyObj.AddComponent<EnemyHealth>();
// Add enemy AI + model
HumanoidEnemy enemy = enemyObj.AddComponent<HumanoidEnemy>();
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);
}
}