天天看点

【Unity3D】导入字体与淡入启动场景

启动场景一般直接简单放个影片,或者高端些则使用淡入效果完成。如下图所示:

【Unity3D】导入字体与淡入启动场景

这使用Unity3D很容易完成,脚本也很简单,就是透明度Alpha变大、字体变大与延迟函数构成的。

同时,这里的字体换成微软雅黑了,借此说明Unity3D如何导入字体的。

首先,我们从C:\Windows\Fonts文件夹拷贝出自己的喜欢的字体到一个纯英文的路径。微软雅黑拷贝出来有两个文件,msyh.ttf是普通的微软雅黑字体,而msyhbd.ttf是加粗的微软雅黑字体,msyh.ttf是比较常用的。在Unity3D的Asset新建一个Fonts文件夹,只能叫这个名字,以便编译的时候发布简单。将msyh.ttf导入进来。

【Unity3D】导入字体与淡入启动场景

之后设置一个Canvas如《【Unity3D】UGUI自适应屏幕与锚点》(点击打开链接)调成自适应屏幕,然后放入一个UI->Text。透明度设置成0。字体设置成微软雅黑。垂直、水平对齐,空白框留大一点,因为一会儿还要放大。Text的内容、字号随意。

【Unity3D】导入字体与淡入启动场景

之后赋予Text如下的脚本Fade.cs:

using UnityEngine;
using UnityEngine.UI;//用到UI必须的头文件
using System.Collections;

public class Fade : MonoBehaviour
{
    Text text;
    float increment;//增量

    void Start()
    {
        /*初始化*/
        text = this.GetComponent<Text>();//因为脚本将会直接赋予给Text,因此直接将其GameObject转化为Text即可
        increment = 0;//初始为0
    }

    void Update()//每帧都会被执行
    {
        if (text.color.a <= 1)//虽然外部显示的是255,但在脚本内alpha的从0到1的
        {
            /*颜色的变化*/
            increment += 0.5f * Time.deltaTime;//增量每帧都增加
            /*这里我也想直接写成text.color.a=increment,但无奈这东西是只读属性,只能如下写法*/
            Color color = text.color;
            color.a = increment;
            text.color = color;
            /*大小的变化*/
            Vector3 scale_unit_vector = new Vector3(1 + increment, 1 + increment, 1 + increment);
            text.transform.localScale = scale_unit_vector;//Unity3D一个物体的大小只能修改缩放尺寸来控制
            //实际大小就是固定的原始大小*单位增量。localScale代表单位增量。
        }
        else//当Text变得完全不透明
        {
            StartCoroutine(WaitAndRun(2.0F));//2s后执行下面WaitAndRun函数
        }
    }

    IEnumerator WaitAndRun(float waitTime)
    {
        yield return new WaitForSeconds(waitTime);
        Debug.Log("进入下一Scene");//使用Application.LoadLevel(sceneName);或者做其它的事情
    }
}
           

基本上注释已经说明得比较清楚了,其中这里延迟执行,类似于《【Unity3D】利用预设、实例化Instantiate和协程完成生成器》( 点击打开链接)中的协程。协程,也就是定时执行函数,就是一个在不断调用延迟执行函数的函数。

继续阅读