【Unity3D】导入字体与淡入启动场景
程序员文章站
2022-07-12 23:35:36
...
启动场景一般直接简单放个影片,或者高端些则使用淡入效果完成。如下图所示:
这使用Unity3D很容易完成,脚本也很简单,就是透明度Alpha变大、字体变大与延迟函数构成的。
同时,这里的字体换成微软雅黑了,借此说明Unity3D如何导入字体的。
首先,我们从C:\Windows\Fonts文件夹拷贝出自己的喜欢的字体到一个纯英文的路径。微软雅黑拷贝出来有两个文件,msyh.ttf是普通的微软雅黑字体,而msyhbd.ttf是加粗的微软雅黑字体,msyh.ttf是比较常用的。在Unity3D的Asset新建一个Fonts文件夹,只能叫这个名字,以便编译的时候发布简单。将msyh.ttf导入进来。
之后设置一个Canvas如《【Unity3D】UGUI自适应屏幕与锚点》(点击打开链接)调成自适应屏幕,然后放入一个UI->Text。透明度设置成0。字体设置成微软雅黑。垂直、水平对齐,空白框留大一点,因为一会儿还要放大。Text的内容、字号随意。
之后赋予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和协程完成生成器》(点击打开链接)中的协程。协程,也就是定时执行函数,就是一个在不断调用延迟执行函数的函数。
上一篇: 第九周作业
推荐阅读