SRPG游戏开发(四十九)第十章 游戏剧情 - 七 text命令执行器与文本界面 (text Command Exeuctor and UI Text Panel)

返回总目录

第十章 游戏剧情(Game Plot)

在大部分的RPG中,故事剧情是非常重要的。例如某些播放某些过场动画,人物台词等文字叙述的显示。这些可以推动整个游戏流程。

在Unity商店中,有一些剧情类的插件。我们编写的这个可以配合那些插件使用。



七 text命令执行器与文本界面 (text Command Exeuctor and UI Text Panel)

我们接下来进行的是text命令,但写命令之前,我们要先有UI能够显示我们的文本。

关于UIManager等问题,第六章的示例已经很好了,你也可以查看本章的源码,或者使用自己的UIManager。两者大同小异,不再阐述。


1 界面结构 (Panel Structure)

我们在这里规定,文本界面有三个显示固定文本窗口,用它们来显示文本:

  • 对话用屏幕上方;

  • 对话用屏幕下方;

  • 过场用屏幕下方(比对话用稍大)。

具体位置如 图 10.1 显示:

UI Text Panel

  • 图 10.1:UI Text Panel

我们的对话文本窗口包含:

  • 背景(Background);

  • 头像(Profile);

  • 文本背景(BackgroundInset);

  • 文本(Text);

  • 文本图标(Icon)(按键提示符);

而我们的过场用文本窗口包含:

  • 文本背景(BackgroundInset);

  • 文本(Text);

  • 文本图标(Icon)(按键提示符);

它们是雷同的,所以我们可以建立一个子UI,能省掉我们很多事。


2 子UI文本窗口(Sub UI Text Window)

首先要明确的是,子窗口的作用:用来显示文本。

而显示方式有多种,一般情况下:

  • 逐字显示;

  • 逐行显示;

  • 直接全部显示。

它们各有各的用处,主要是看游戏的需求。

根据结构,我们先创建一个UIBehaviour(它在UnityEngine.EventSystems命名空间下):

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.UI;

namespace DR.Book.SRPG_Dev.UI
{
   
    [AddComponentMenu("SRPG/UI/Text Window")]
    public class SubUITextWindow : UIBehaviour
    {
   
        #region UI Fields
        [SerializeField]
        private Image m_ImgBackground;
        [SerializeField]
        private Image m_ImgProfile;
        [SerializeField]
        private Image m_ImgBackgroundInset;
        [SerializeField]
        private Text m_TxtText;
        [SerializeField]
        private Image m_ImgIcon;
        #endregion

        #region UI Properties
        // 省略UI属性
        #endregion

        /// TODO 其它内容
    }
}
2.1 字段与属性(Fields and Properties)

我们这里选择 逐字写入 ,我们就需要一个写入速度,我们称它为写入间隔。而写入的过程,我们使用Coroutine(当然,你也可以使用Update())。

所以我们需要的字段:

  • 写入间隔;

  • 需要写入的文本;

  • 是否正在写入文本。

创建字段与属性:

        #region Fields
        [SerializeField]
        private float m_WordInterval = 0.05f;

        private string m_Text = string.Empty;
        private Coroutine m_WritingCoroutine = null;
        #endregion

        #region Properties
        /// <summary>
        /// 写入时每个字符的时间间隔
        /// </summary>
        public float wordInterval
        {
   
            get {
    return m_WordInterval; }
            set {
    m_WordInterval = Mathf.Max(0f, value); }
        }

        /// <summary>
        /// 是否在写入状态
        /// </summary>
        public bool isWriting
        {
   
            get {
    return m_WritingCoroutine != null; }
        }

        /// <summary>
        /// 获取应写入的完整文本
        /// </summary>
        public string text
        {
   
            get {
    return m_Text; }
        }
        #endregion
2.2 写入完成事件(Write Text Done Event)

我们在完成写入文本时,最好可以进行通知(例如通知我们的UITextPanel),这使用事件是一个好方法。

创建写入完成事件:

        #region Unity Event
        /// <summary>
        /// 当文本写入完成时:
        /// Args: 
        ///     SubUITextWindow textWindow; // 写入的窗口
        /// </summary>
        [Serializable]
        public class TextWriteDoneEvent : UnityEvent<SubUITextWindow> {
    }

        [Space, SerializeField]
        private TextWriteDoneEvent m_TextWriteDoneEvent = 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值