第十章 游戏剧情(Game Plot)
在大部分的RPG中,故事剧情是非常重要的。例如某些播放某些过场动画,人物台词等文字叙述的显示。这些可以推动整个游戏流程。
在Unity商店中,有一些剧情类的插件。我们编写的这个可以配合那些插件使用。
文章目录
九 游戏导演与测试 (Game Director and Testing)
我们在之前已经完成了许多典型命令的编写,其它命令不再说明,大同小异。
现在,我们有了一个剧情动作ScenarioAction
,它用来指导我们剧情的走向;
以后还会有MapAction
,它用来指导我们地图是如何建立的,并将地图事件指向剧情;
不过在这之前我们还没有“导演”来统筹规划。
这一节,我们创建这个导演,并且测试剧情。
1 游戏导演类(Class GameDirector)
我们的导演是统筹规划游戏所有剧情与事件的,属于管理器一类,所以它应该是个单例。
我们再来看看它的基本功能:
-
读取剧本;
-
执行剧本;
-
停止执行剧本;
基本功能基本上只有以上三个。但不要忘记,在游戏进行初期需要一个入口,这个入口就是“首次运行的剧本”。而执行剧本时,我们需要每帧都运行游戏,你可以使用Update()
,也可以使用Coroutine
。
基于以上,我们来创建导演类:
using System;
using System.Collections;
using UnityEngine;
namespace DR.Book.SRPG_Dev.ScriptManagement
{
using DR.Book.SRPG_Dev.Framework;
using DR.Book.SRPG_Dev.Models;
public class GameDirector : UnitySingleton<GameDirector>
{
#region Fields
[SerializeField]
private bool m_DebugInfo = true;
[SerializeField]
private string m_FirstScenario = "main";
[SerializeField]
private bool m_FirstScenarioIsTxt = true;
private IGameAction m_GameAction = null;
private Coroutine m_Coroutine = null;
#endregion
#region Properties
// 省略Properties
#endregion
// TODO 读取剧本、运行剧本、停止剧本
}
}
1.1 读取剧本动作 (Load Scenario Action)
关于读取剧本,我们新建一个Model称为ScenarioModel
(第八章已经写过多次,具体不再重复),里面包含了获取剧本的方法IScenario Get(string name, bool txt = true)
(我们的剧本只使用了两种格式)。
我们读取剧本后需要创建我们的ScenarioAction
。
所以我们的步骤是:
-
从
ScenarioModel
读取剧本文本; -
创建
ScenarioAction
; -
读取命令执行器;
-
并让
ScenarioAction
读取剧本文本。
创建方法:
/// <summary>
/// 读取剧本
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public virtual bool LoadScenario(string name, bool txt = true)
{
ScenarioModel model = ModelManager.models.Get<