实现关卡波次管理与复活
实现流程
新建 GameApp 类
- 新建 GameApp 类并挂载到 GameManager 中
- 实现
csharp
using System;
using Character;
using DG.Tweening;
using TMPro;
using UnityEngine;
public class GameApp : MonoBehaviour
{
public enum GameState
{
None,
Fight,
Break,
Dead,
}
public static GameApp Instance { get; private set; }
public GameState State { get; set; } = GameState.None;
public int Level = 1;
private void Awake()
{
Instance = this;
}
private void Start()
{
Init();
SpawnPlayer();
}
private void Init()
{
AudioManager.Instance.Init();
AudioManager.Instance.PlayBGM("PixelCanon"); // 播放背景音乐
Cursor.visible = false;
}
private void Update()
{
if (State == GameState.Dead && Input.GetKeyDown(KeyCode.R))
{
SpawnPlayer();
}
}
private void SpawnPlayer()
{
// 查找所有敌人并销毁
var enemies = FindObjectsOfType<Enemy>();
foreach (var enemy in enemies)
{
enemy.SetDead(); // 调用敌人的死亡方法
}
Level = 0;
PlayerController.Instance.Exp = 0; // 重置经验值
LevelUp();
RandomColor();
PlayerController.Instance.status.Respawn();
State = GameState.Fight; // 设置游戏状态为战斗
}
public void CheckLevel()
{
if (State == GameState.Fight && PlayerController.Instance.Exp >= Math.Pow(2, Level))
{
LevelUp();
}
}
private void RandomColor()
{
// 随机颜色
var randomR = UnityEngine.Random.Range(0f, 1f);
var randomG = UnityEngine.Random.Range(0f, 1 - randomR);
var randomB = 1f - randomR - randomG;
var color = PlayerController.Instance.PlayerColor = new Color(
randomR,
randomG,
randomB
);
PlayerController.Instance.gameObject.GetComponent<SpriteRenderer>().material.DOColor(4 * color, 0.5f);
GameObject.Find("Background/Background").GetComponent<SpriteRenderer>().material.DOVector(color * 0.025f, "_LineColor", 0.5f);
}
private void LevelUp()
{
Level += 1;
var text = GameObject.Find("Canvas/Level").GetComponent<TMP_Text>();
text.text = "Level " + Level;
text.transform.DOPunchScale(Vector3.one * 0.2f, 0.5f, 10, 1f)
.OnComplete(() => text.transform.localScale = Vector3.one);
AudioManager.Instance.PlayEffect("SFX/LevelUp");
MobSpawner.Instance.MobCount = Level; // 增加怪物数量
PlayerController.Instance.shooter.ShootCD = 0.1f + 1f / Level;
PlayerController.Instance.shooter.ShootCount = 1 + Level / 4;
PlayerController.Instance.shooter.BulletDamage = Level * 10 + 30;
MobSpawner.Instance.MobHealth = 100 + Level * 15; // 增加怪物生命值
RandomColor();
}
}
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100