Unity 2018.1中如何创建字幕系统?本人为C#新手
嘿,作为C#新手完全不用担心,在Unity 2018.1里做个简单的字幕系统其实挺容易的,而且不需要配音功能也完全没问题。我给你一步步拆解,都是最基础的操作,跟着来就行~
第一步:创建UI文本组件
- 在Unity编辑器顶部菜单选
GameObject > UI > Text,Unity会自动生成一个带Canvas的Text对象(UI元素必须依赖Canvas才能显示) - 调整Text的位置、字体大小、颜色:比如把它拖到屏幕底部居中,字号设为30,颜色选白色(或者匹配你游戏风格的颜色)
- 给Text对象改个好记的名字,比如
SubtitleText,方便后续操作
第二步:编写字幕控制脚本
- 在Project窗口右键选择
Create > C# Script,命名为SubtitleManager - 打开脚本,替换成下面的代码(我加了详细注释,你能看懂每一步在做什么):
using UnityEngine; using UnityEngine.UI; public class SubtitleManager : MonoBehaviour { // 把场景里的SubtitleText拖到这里 public Text subtitleText; // 存储所有要显示的字幕内容 public string[] subtitleLines; // 当前显示的字幕序号 private int currentLine = 0; // 每句字幕自动显示的时长(单位:秒) public float displayDuration = 3f; // 计时器,用来控制切换字幕 private float timer; void Start() { // 初始状态先清空字幕 subtitleText.text = ""; // 如果有字幕内容,直接显示第一句 if(subtitleLines.Length > 0) { ShowCurrentLine(); } } void Update() { // 没有更多字幕的话,直接清空并退出 if(currentLine >= subtitleLines.Length) { subtitleText.text = ""; return; } // 累计时间 timer += Time.deltaTime; // 到了设定时长就切换下一句 if(timer >= displayDuration) { currentLine++; if(currentLine < subtitleLines.Length) { ShowCurrentLine(); } // 重置计时器 timer = 0f; } // 可选:按空格键手动切换字幕(玩家自己控制节奏) if(Input.GetKeyDown(KeyCode.Space)) { NextLine(); } } // 显示当前序号的字幕 void ShowCurrentLine() { subtitleText.text = subtitleLines[currentLine]; } // 手动切换下一句的方法(也可以绑定到按钮) public void NextLine() { currentLine++; if(currentLine < subtitleLines.Length) { ShowCurrentLine(); timer = 0f; // 重置计时器,重新开始计时 } else { subtitleText.text = ""; } } }
第三步:设置脚本并测试
- 在场景里创建一个空对象,命名为
SubtitleController,把SubtitleManager脚本拖到这个对象上 - 在Inspector面板里,把场景中的
SubtitleText拖到脚本的subtitleText字段中 - 找到
subtitleLines,点击数组大小的数字(比如设为4),然后在每个输入框里填你的字幕内容,比如“欢迎来到这个场景!”“这里是第一句字幕”“现在切换到第二句啦”“字幕展示结束~” - 调整
displayDuration的值,比如设为2,就是每句自动显示2秒 - 点击运行按钮,就能看到字幕自动切换了,按空格还能手动跳句
小进阶(可选,新手可以之后再试)
- 如果需要不同句子显示不同时长,可以把
subtitleLines改成自定义类(包含文本和对应时长),不过先把基础版玩熟再说 - 给字幕加淡入淡出效果:给
SubtitleText加个CanvasGroup组件,在切换字幕时调整alpha值实现渐变 - 把字幕存在外部.txt文件里,用代码读取,这样不用在Inspector里逐个输入
这些操作都是最基础的,你跟着一步步来肯定没问题,要是哪里卡壳了,仔细检查组件有没有拖对、脚本有没有拼写错误就好~
内容的提问来源于stack exchange,提问作者Edward P.




