82 lines
2.6 KiB
C#
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);
|
|
}
|
|
}
|