项目文档链接:John Lemon's Haunted Jaunt 项目教程 (适用于3D初学者) - Unity Learn
总代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class GameEnding : MonoBehaviour
{
public float fadeDuration = 1f;
public float displayImageDuration = 1f;
public GameObject player;
public CanvasGroup exitBackgroundImageCanvasGroup;
public CanvasGroup caughtBackgroundImageCanvasGroup;
public AudioSource exitAudio;
public AudioSource caughtAudio;
bool m_IsPlayerAtExit;
bool m_IsPlayerCaught;
float m_Timer;
bool m_HasAudioPlayed;
void OnTriggerEnter(Collider other)
{
if (other.gameObject == player)
{
m_IsPlayerAtExit = true;
}
}
public void CaughtPlayer()
{
m_IsPlayerCaught = true;
}
void Update()
{
if (m_IsPlayerAtExit)
{
EndLevel(exitBackgroundImageCanvasGroup, false,exitAudio);
}
else if (m_IsPlayerCaught)
{
EndLevel(caughtBackgroundImageCanvasGroup, true,caughtAudio);
}
}
void EndLevel(CanvasGroup imageCanvasGroup, bool doRestart,AudioSource audioSource)
{
if (!m_HasAudioPlayed)
{
audioSource.Play();
m_HasAudioPlayed = true;
}
m_Timer += Time.deltaTime;
imageCanvasGroup.alpha = m_Timer / fadeDuration;
if (m_Timer > fadeDuration + displayImageDuration)
{
if (doRestart)
{
SceneManager.LoadScene(0);
}
else
{
Application.Quit();
}
}
}
}
---------------------------------------------------------------------------------------------------------------------------------
CanavasGroup 是Unity中的画布组件
OnTriggerEnter用于检测游戏对象触发一个碰撞器的事件 传入的参数Collider是触发事件的目标
other.GameObject是触发事件附加的游戏对象
player对应Unity组件中的Player
使用时记得打开Collider组件中的IS trigger选项
CaughtPlayer为受伤判定
传入的参数分别是 Unity中的Canvas组件、一个用于判断是否重开的BOOL 以及AudioSource组件
第一个if用于判断是否播放音乐
Time.deltaTime是一个表示上一帧到当前帧所用时间的变量,表示每一帧的间隔
imageCanvasGroup.alpha = m_Timer / fadeDuration;是调节Canvas中的alpha数值的方法以此调节动画的透明度。可以实现动画逐渐淡出或淡入的效果
SceneManager.LoadScene(0)是SceneManager类的一个方法 用于重新加载场景
Application.Quit();是Unity提供的一个退出游戏的方法,是一个不可逆的操作