Day 27 | Unity游戏开发 - 对话介面管理器

今天的文章,要说明如何使用对话管理器来制作游戏的角色对话介面。

目录
创建中文字型
对话介面配置
对话管理器

创建中文字型

Step1 找到要的字型

可以从原本电脑的字型中选取,或者是从网路上下载字型资源都可以。将想要的生成的字型拉近专案的资料夹中。

Step2 准备好要生成的字与会用到的Font Asset

在资料夹中,对刚刚拉进来的字型点选右键,创建TextMeshPro的Font Asset。复制好所有对话内容,包含中文字、符号等。

Step3 创建对话专属的Font Assest

点选 windows>TextMeshPro>Font Asset Creator 进入产生器。
选取原本选定的字型,以及刚刚创建的Font Asset,再贴上复制的对话内容,再依照各自的需求对其他选项作调整,调整好後就可以点选Generate,之後再储存字型就产生罗。

对话介面配置

可依照自己的摆放要显示的介面,但必须要有TextMeshPro来显示对话以及Button来控制显示下一句。

对话管理器

Step1变数宣告

  • TextMeshProUGUI textDisplay变数用来改变对话内容
  • string[] sentences储存对话句子
  • int index对话阵列的索引
  • float typingSpeed每个字的出现速度
  • GameObject DialogPannel 用来控制对话介面Pannel
  • GameObject continueButton 控制显示下一句话
public TextMeshProUGUI textDisplay;
public string[] sentences;
public int index;
public float typingSpeed;
    
public GameObject DialogPannel;
public GameObject continueButton;

再宣告好string[]变数後,去Unity的Inspector面板中,填入对话的句子,之後会用到。

对话显示,打字效果

用foreach将句子中的每个letter分开显示,WaitForSeconds出现延迟打字效果。

IEnumerator Type() {
       foreach (char letter in sentences[index].ToCharArray()) {
           textDisplay.text += letter;
           yield return new WaitForSeconds(typingSpeed);
       }
   }

跳到下一句函式

  • 先让continueButton不要显示,等句子显示玩再出现。
  • 用index判断对话结束没,还没结束就继续显示对话。
  • 对话结束就清空TextProMesh的text并关闭对话介面
public void NextSentence() {
    continueButton.SetActive(false);

    if (index < sentences.Length - 1){
        index++;
        textDisplay.text = "";
        typywords.Play();
        StartCoroutine(Type());
    }
    
    else {
        textDisplay.text = "";
        continueButton.SetActive(false);
        DialogPannel.SetActive(false);
    }
}

记得在continueButton这个控制前往下一句话的Button,设置Onclick要触发NextSentence()这个函式。

整个对话生成器的主要功能串接

判断句子的letter是不是都出现了,如果都出现了前往下一句话的Button就可以开启,并处在选择状态。

void Update()
{
    if (textDisplay.text == sentences[index]) {
        continueButton.SetActive(true);
        typywords.Stop();
        continueButton.GetComponent<Button>().Select();
    }
}

以上对话的部分就完成罗!再依据不同的场景会有不同的对话系统去设定就可以了!
那我们明天见~


<<:  图的最短路径 - 佛洛伊德演算法 - DAY 27

>>:  D3JsDay26圆圈图的实战力,直辖市人口比例-带入真实资料做圆圈图

Day21 - 铁人付外挂设定介面(三)- 自订栏位

先来回顾一下目前铁人付金流外挂的资料夹结构: iron-pay ├── composer.json ...

在日本登记公司跟运营公司用的服务

今天分享我们在日本登记公司跟运营公司用的一些服务 虚拟住址、电话、电话秘书 登记公司需要住址跟电话 ...

Day 18 - UML x Component — Button

Button 是网页中最常用的元件,跟他相依的元件和情境也不少,因此虽然他不是一个介面,依然还是可...

D16/ 所以到底为什麽 remember 是 composable function? - @Composable 是什麽 part 2

今天大概会聊到的范围 compose runtime compose compiler 今天会更深...

企划实现(12)

FB登入 第10步:开启 /app/res/values/strings.xml 档案。 FB会自动...