欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-12 23:35:36
...

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

【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和协程完成生成器》(点击打开链接)中的协程。协程,也就是定时执行函数,就是一个在不断调用延迟执行函数的函数。