2.11 游戏管理器(2)
Instance是一个静态的句柄,在Awake函数中指向自身实例,这样我们就可以在其它类中使用GameManager. Instance的形式直接取得GameManager实例。注意,GameManager只能有一个实例。
m_score和m_hiscore属性分别表示当前得分和最高得分纪录,m_hiscore是一个静态属性,它会一直存在,并不会因为读取关卡而重新初始化。
在Start函数中获得主角实例的方式与在SuperEnemy类中的方式近似,只是这一次获得的是主角的Player角本组件。
在Update函数中,我们循环播放背景音乐,注意播放方式与前面播放射击音效的区别。另外,如果按Esc键,将设Time.timeScale的值为0,这时游戏会暂停。
OnGUI是一个特殊的函数,专门用来画UI界面。其中Rect函数用来表示UI的出现位置和大小,Label函数用来书写文字,Button函数用来显示按钮。
当Time.timeScale为0时,屏幕将显示2个按钮,一个用于继续游戏,另一个退出游戏。
Application.Quit用来退出当前程序。
Application.LoadLevel用来读取下一个关卡,这里是重新读取当前关卡。在读取下一个关卡的时候,当前关卡的游戏体都会被销毁,如果希望可以保存一些游戏数据,可以将其设置为静态的属性。
2)创建空游戏体作为游戏管理器,为其指定Audio Source组件,然后指定GameManager.cs作为其角本组件。
3)在资源文件中找到music.mp3,把它与游戏管理器的m_musicClip属性相关联。
4)选择music.mp3,在Inspector窗口取消选中3D Sound,使其成为一个2D声音,它的音量将不会受3D空间距离影响。默认在场景摄像机上有一个Audio Listener组件,3D声音的音量取决于声音源与摄像机的距离。
5)打开Enemy.cs,为它添加一个分数属性,不同敌人的分数可以在Inspector窗口中作不用的设置。
- public
int m_point = 10;
6)在Enemy的OnTriggerEnter函数中添加GameManager.Instance.AddScore(m_point)语句,当敌人被消灭时我们会获得一定分数:
(此处有删节)
运行游戏,最后的效果如图2-37所示。
如果UI上的中文显示为乱码,使用Visual Studio打开GameManager.cs角本,在菜单栏选择【Save】→【Advanced Save Options】,然后将其保存为UTF8格式即可,如图2-38所示。