第七天

  • 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对象(图片来源

unity 页面显示关闭 unity结束界面_官方教程翻译


效果如下

unity 页面显示关闭 unity结束界面_学习_02


其中EventSystem对象有一些附属的组件可以协作完成任何UI元素和玩家之间的交互,但结束的UI并不需要与玩家交互所以右键删除该组件。

在scene窗口中点击

unity 页面显示关闭 unity结束界面_学习_03


unity 页面显示关闭 unity结束界面_初学者教程_04

因为此处的UI是一个平面图形并且我们希望不要显示之前设置的后处理特效。

设置完后效果如下

unity 页面显示关闭 unity结束界面_untiy_05

Step 2 Canvas对象

我们希望创建的是一个渐进出现的结束UI所以先将其更名为FaderCanvas
其中

Rect Tranform组件

控制其位置,对于根层次的UI来说它是只读的

The Canvas组件

用于怎样呈现你的UI元素,其中还有个隐藏模式如下

unity 页面显示关闭 unity结束界面_官方教程翻译_06


Screen Space-Overly 将该画布于其他所有元素之上显示,即置顶显示。

Screen Space - Camera显示到指定的相机,并且大小取决于画布与相机的距离。

World Space显示到指定对象的前面或后面,如不同玩家头上的身份标签。

在这里我们选择Screen Space-Overly。

Canvas Scaler组件

用于控制UI与屏幕的相对大小,我们的UI将会完全填满屏幕所以并不需要该组件,直接移除。

Graphic Raycaster组件

用于检测用户界面事件,如点击了某个UI元素,它将发送对应的事件发送给该元素,这里也不需要,直接移除。

设置子对象 Image

选中重命名为Background,用于游戏结束为UI提供一个纯黑的背景。

调整它的Rect Tranform组件属性如下

unity 页面显示关闭 unity结束界面_官方教程翻译_07


效果如下,其中调整的分别是锚点的位置和UI的边距如此设置即为全窗口

unity 页面显示关闭 unity结束界面_官方教程翻译_08

设置颜色

在Image组件中找到color属性,如下设置,A通道代表的是透明度1表示不透明

unity 页面显示关闭 unity结束界面_untiy_09


效果

unity 页面显示关闭 unity结束界面_学习_10

添加胜利图片

以Background对象为根创建一个再Image子对象重命名为ExitImage,Rect Tranform组件设置同上,勾选Image组件中

unity 页面显示关闭 unity结束界面_unity 页面显示关闭_11

取消拉伸。

效果如下

unity 页面显示关闭 unity结束界面_官方教程翻译_12

添加Canvas Group 组件

该组件允许你控制游戏对象及其所有制对象上所有可见UI元素的某些属性,如透明度。

选中Background对象,Inspector窗口中添加Canvas Group 组件,更改Alpha为0即完全透明。

unity 页面显示关闭 unity结束界面_学习_13


我们希望在触发结束条件后Alpha的值渐渐变为1即渐渐出现结束UI。完成后保存

Step 3 创建触发条件

创建一个空对象,重命名为GameEnding,设置Position为(18, 1, 1.5);并为其添加Box Collider组件,勾选Is Trigger,设置size为(1,1,3.5)。

unity 页面显示关闭 unity结束界面_学习_14


效果如图

unity 页面显示关闭 unity结束界面_初学者教程_15

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触发器对象中,将其下的两个属性分别作设置如下

unity 页面显示关闭 unity结束界面_unity 页面显示关闭_16


效果

unity 页面显示关闭 unity结束界面_学习_17

下一节

添加第一个敌人