抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

说明:开始游戏时播放ui动画,放完后摧毁红色闸门。游戏结束时(吃完红宝石),弹出用时、结束画面。

image-20220921170427534

image-20220921171040912

开始画面

开始时ReadyScreen对象的CanvasAnimator组件默认为开启。

image-20220921173413495

在ReadyScreen对象下新建同名脚本ReadyScreen,拖入脚本化对象VoidEventChannel

image-20220921171132192

ui关闭时调用委托(关门),并且隐藏Canvas和Animator,播放音效。

public class ReadyScreen : MonoBehaviour
{
[SerializeField] VoidEventChannel levelStartedEventChannel;//获取事件频道
[SerializeField] AudioClip beginSFX;//开始音效
private void CloseUI()
{
levelStartedEventChannel.Broadcast();//调用委托
GetComponent<Canvas>().enabled = false;
GetComponent<Animator>().enabled = false;
SoundEffectsPlayer.audioSource.PlayOneShot(beginSFX);//播放音效
}
}

接下来是添加动画事件

动画器中选中最后一帧,添加事件

image-20220921172309718

选择该ui上脚本里的函数CloseUI(),当动画执行到此就会运行该函数。

image-20220921172359029

记得在闸门(StartGate)上添加Gate脚本 附加上对应的脚本化文件。

image-20220921172756313

因此实现通过动画事件,隐藏ui、播放开始动画、移除闸门等操作。

结束画面

与上面原理相同,流程:吃到红宝石游戏结束,弹出游戏结束画面。

红宝石中的同名脚本VitoryGem中,获取事件频道,触发函数时调用委托。

using UnityEngine;
public class VitoryGem : MonoBehaviour
{
[SerializeField] AudioClip pickUpSound;//音效
[SerializeField] ParticleSystem pickUpVFX;//特效
[SerializeField] VoidEventChannel levelClearedEventChannel;//获取事件频道
private void OnTriggerEnter(Collider other)
{
levelClearedEventChannel.Broadcast();//调用委托
SoundEffectsPlayer.audioSource.PlayOneShot(pickUpSound);
Instantiate(pickUpVFX, transform.position, Quaternion.identity);
Destroy(gameObject);//摧毁
}
}

VictoryScreen对象(UI)创建同名脚本VictoryScreen

VictoryScreen默认Canvas和Animator为隐藏

image-20220921174100250

在ShowUI函数中开启显示Canvas和Animator组件。

using UnityEngine;
public class VictoryScreen : MonoBehaviour
{
[SerializeField] VoidEventChannel levelClearedEventChannel;//获取事件频道
private void OnEnable()
{
levelClearedEventChannel.AddListener(ShowUI);
}
private void OnDisable()
{
levelClearedEventChannel.RemoveListener(ShowUI);
}
private void ShowUI()
{
GetComponent<Canvas>().enabled = true;
GetComponent<Animator>().enabled = true;
}
}

评论