在随机范围内生成敌人
学习目标
完成本教程后,你会学会
- 如何生成敌人
操作流程
- 在 Project 视图中,在 Resources 目录下新建 Model 文件夹
- 找到 Model/Enemy,在预制体中添加脚本 Enemy
- 在 Scripts 文件夹下新建脚本 Mob Spawner
- 实现敌人生成
csharp
using Character;
using UnityEngine;
public class MobSpawner : MonoBehaviour
{
public static MobSpawner Instance { get; private set; }
public Vector2 SpawnAreaSize = new Vector2(5f, 5f); // 生成区域的大小
public GameObject MobPrefab; // 怪物预制体
public int MobCount = 5; // 生成的怪物数量
public float SpawnInterval = 2f; // 怪物生成间隔时间
public int MobHealth = 100; // 怪物的初始生命值
private float spawnTimer = 0f; // 计时器
private void Awake()
{
Instance = this;
}
private void Start()
{
// 初始化计时器
spawnTimer = SpawnInterval;
}
private void Update()
{
if (GameApp.Instance.State == GameApp.GameState.Break || GameApp.Instance.State == GameApp.GameState.Dead) return;
// 更新计时器
spawnTimer -= Time.deltaTime;
if (spawnTimer <= 0f)
{
SpawnMobs();
spawnTimer = SpawnInterval; // 重置计时器
}
}
private void SpawnMobs()
{
for (int i = 0; i < MobCount; i++)
{
Vector2 spawnPosition = new Vector2(
Random.Range(-SpawnAreaSize.x / 2, SpawnAreaSize.x / 2),
Random.Range(-SpawnAreaSize.y / 2, SpawnAreaSize.y / 2)
);
var obj = Instantiate(MobPrefab, spawnPosition, Quaternion.identity);
var enemy = obj.AddComponent<Enemy>();
enemy.MaxHp = 100;
enemy.Init();
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
- 将 Mob Spawner 拖入 GameManager 物体上
- 在 Inspector 中,将建好的敌人预制体拖入 MobPrefab 中。
概念解析
Time.deltaTime
用于获取该帧所经过的时间,用于计时。
Random.Range
在范围内取随机数