首页 技术 正文
技术 2022年11月18日
0 收藏 700 点赞 2,527 浏览 1959 个字

这里先补充一个得分管理器:

玩家得分设置成一个静态变量:

 public class ScoreManager : MonoBehaviour
{
public static int score; // 玩家得分
Text text; // UI
void Awake ()
{
text = GetComponent <Text> ();
//开始时候重置得分
score = 0;
}
void Update ()
{
// Set the displayed text to be the word "Score" followed by the score value.
text.text = "Score: " + score;
}
}

1.然后来看一下游戏结束管理器:

这个管理器每帧判断玩家当前生命是否为0,为0则游戏结束,播放结算UI淡入的动画

public class GameOverManager : MonoBehaviour
{
public PlayerHealth playerHealth; // 玩家生命
Animator anim; // GameOver状态机
void Awake ()
{
anim = GetComponent <Animator> ();
}
void Update ()
{
if(playerHealth.currentHealth <= 0)
{
// 告诉状态机游戏结束
anim.SetTrigger ("GameOver");
}
}
}

这里现在是:玩家死亡播放结算动画,重新开始游戏是放在玩家的死亡动画的事件中调用的;

原版本做法:玩家死亡播放结算动画,然后开启计时器,计时到restartDelay重启delay时间后重启游戏;这两种方法都是可行的。

这里需要注意的是:结算UI淡入的动画是用Animation录制关键帧的:

录制成Animation后,设置好状态机:需要先新建一个空的状态且设为默认,然后用Trigger带到游戏结束状态:

Animator组件和GameOverManager脚本都放在画布上:

所以玩家死亡后就播放了录制好的结算淡入动画,记得录制好后取消loop。

2.游戏暂停管理器:(Nice的三元运算符)

public class PauseManager : MonoBehaviour {Canvas canvas;
void Start()
{
canvas = GetComponent<Canvas>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Escape))
{
canvas.enabled = !canvas.enabled;
Pause();
}
}
public void Pause()
{
Time.timeScale = Time.timeScale == 0 ? 1 : 0; //暂停就取消暂停,没暂停就暂停
}
public void Quit()
{
#if UNITY_EDITOR
EditorApplication.isPlaying = false; //编辑器里的退出
#else
Application.Quit(); //版本的退出
#endif
}

暂停时打开的游戏设置面板:

1/ 滑动条控制音量 (注册改音量事件 到滑动条值改变的事件中)AddListener(UGUI事件);毁灭物体时移除事件。

void Start ()
{
if(GameObject.Find("EffectsSlider"))
GameObject.Find("EffectsSlider").GetComponent<Slider>().onValueChanged.AddListener(SetVolume);
}
void SetVolume(float volume)
{
GetComponent<AudioSource>().volume = volume;
}
void OnDestroy()
{
if(GameObject.Find("EffectsSlider"))
GameObject.Find("EffectsSlider").GetComponent<Slider>().onValueChanged.RemoveListener(SetVolume);
}

2/ 暂停时候背景音效衰弱设置:

使用AudioMixerSnapShot类需要using UnityEngine.Audio

public AudioMixerSnapshot paused; //暂停时的
public AudioMixerSnapshot unpaused; //取消暂停恢复的

暂停函数Pause()中调用这个函数:

void Lowpass()
{
if (Time.timeScale == 0)
{//0.01s后切换到暂停的音效设置
paused.TransitionTo(.01f);
}
else{//0.01s后切换回来
unpaused.TransitionTo(.01f);
}
}

关于AudioMixer,后面会具体讲。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,955
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,479
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,291
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,108
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,740
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,774