第七天
- Step 1 创建UI(user interface)
- Step 2 Canvas对象
- Rect Tranform组件
- The Canvas组件
- Canvas Scaler组件
- Graphic Raycaster组件
- 设置子对象 Image
- 设置颜色
- 添加胜利图片
- 添加Canvas Group 组件
- Step 3 创建触发条件
- Step 4 创建一个新脚本
- 下一节
Step 1 创建UI(user interface)
在Hierarchy窗口中创建一个image对象(图片来源)
效果如下
其中EventSystem对象有一些附属的组件可以协作完成任何UI元素和玩家之间的交互,但结束的UI并不需要与玩家交互所以右键删除该组件。
在scene窗口中点击
和
因为此处的UI是一个平面图形并且我们希望不要显示之前设置的后处理特效。
设置完后效果如下
Step 2 Canvas对象
我们希望创建的是一个渐进出现的结束UI所以先将其更名为FaderCanvas
其中
Rect Tranform组件
控制其位置,对于根层次的UI来说它是只读的
The Canvas组件
用于怎样呈现你的UI元素,其中还有个隐藏模式如下
Screen Space-Overly 将该画布于其他所有元素之上显示,即置顶显示。
Screen Space - Camera显示到指定的相机,并且大小取决于画布与相机的距离。
World Space显示到指定对象的前面或后面,如不同玩家头上的身份标签。
在这里我们选择Screen Space-Overly。
Canvas Scaler组件
用于控制UI与屏幕的相对大小,我们的UI将会完全填满屏幕所以并不需要该组件,直接移除。
Graphic Raycaster组件
用于检测用户界面事件,如点击了某个UI元素,它将发送对应的事件发送给该元素,这里也不需要,直接移除。
设置子对象 Image
选中重命名为Background,用于游戏结束为UI提供一个纯黑的背景。
调整它的Rect Tranform组件属性如下
效果如下,其中调整的分别是锚点的位置和UI的边距如此设置即为全窗口
设置颜色
在Image组件中找到color属性,如下设置,A通道代表的是透明度1表示不透明
效果
添加胜利图片
以Background对象为根创建一个再Image子对象重命名为ExitImage,Rect Tranform组件设置同上,勾选Image组件中
取消拉伸。
效果如下
添加Canvas Group 组件
该组件允许你控制游戏对象及其所有制对象上所有可见UI元素的某些属性,如透明度。
选中Background对象,Inspector窗口中添加Canvas Group 组件,更改Alpha为0即完全透明。
我们希望在触发结束条件后Alpha的值渐渐变为1即渐渐出现结束UI。完成后保存
Step 3 创建触发条件
创建一个空对象,重命名为GameEnding,设置Position为(18, 1, 1.5);并为其添加Box Collider组件,勾选Is Trigger,设置size为(1,1,3.5)。
效果如图
Step 4 创建一个新脚本
在Scripts目录下创建一个C#脚本命名为GameEnding,实现监视John是否进入触发器范围内,若进入则将Alpha从0渐变为1的功能,双击打开删除Start方法。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameEnding : MonoBehaviour
{
public float fadeDuration = 1f;//渐变发生持续时间
public GameObject player;//用于添加John对象
bool m_IsPlayerAtExit;//
float m_Timer;//记录持续时间
public CanvasGroup exitBackroundImageCanvasGroup;//用于添加CanvasGroup组件
public float displayImageDuration = 1f;
void OnTriggerEnter(Collider other)//触发器
{
if(other.gameObject == player)//如果触发者是John
{
m_IsPlayerAtExit = true;//游戏结束
}
}
void Update()//帧更新
{
if(m_IsPlayerAtExit)//如果触发了结束条件
{
EndLevel();//逐渐显示结束图片
}
}
void EndLevel ()//处理结束画面
{
m_Timer += Time.deltaTime;
exitBackroundImageCanvasGroup.alpha = m_Timer / fadeDuration;//在一秒内逐渐显示结束图片
if (m_Timer > fadeDuration + displayImageDuration)//如果持续时间大于2秒
{
Application.Quit();//退出游戏
}
}
}
//Application.Quit();没有效果,暂时不知道原因
退出保存将其拖入GameEnding触发器对象中,将其下的两个属性分别作设置如下
效果
下一节
添加第一个敌人