SRPG游戏开发(四十六)第十章 游戏剧情 - 四 执行命令 (Execute Command)

返回总目录

第十章 游戏剧情(Game Plot)

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

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



四 执行命令 (Execute Command)

我们在这里将对命令的执行进行处理。

我们将遵循以下步骤直到运行结束:

  • 读入一条命令;

  • 格式化命令成参数;

  • 将参数传入命令方法,并执行。

而在运行它们时,我们需要一个能够将命令参数字符串转化成方法理解的参数(Parse)。其中执行命令的动作,我们称它为GameAction(看起来Action这个单词在很多地方都用过,如果你没有使用命名空间,那么就要注意命名问题了;在表示上,在这里不止表示剧情动作(就像电影那样),还有我们的一些操作指令。当然,最后还不能缺了导演GameDirector

GameDirector将作为游戏剧情的主控制器。


1 游戏动作(Game Action)

我们在开始编写之前,一定要先搞清楚它的作用(运行命令):

  • 运行的命令不一定是剧情方面的命令,也有一些操作命令;剧本动作(类似电影的Action)只是游戏动作的一种。

  • 游戏动作中间可能穿插其它分支动作(例如剧情剧本中读取分支剧本),所以它应该有一个参数“上一个动作”;

  • 和电影剧本不同的是,它有许多程序方面的东西,所以不一定是一个标准的剧本;

  • 在游戏中,可能弹出选项,需要有等待功能,且有时还需要有计时器功能;

在创建时,我们同样最好有一个基类或者接口,这样方便添加其它类型。

1.1 游戏动作接口(Interface IGameAction)

创建接口IGameAction

using System;
using UnityEngine;

namespace DR.Book.SRPG_Dev.ScriptManagement
{
   
    public interface IGameAction : IDisposable
    {
   
        /// <summary>
        /// 是否打印信息
        /// </summary>
        bool debugInfo {
    get; set; }

        /// <summary>
        /// 上一个Action
        /// </summary>
        IGameAction previous {
    get; }

        /// <summary>
        /// 错误信息
        /// </summary>
        string error {
    get; }

        /// <summary>
        /// 抛出异常
        /// </summary>
        /// <param name="abortParams"></param>
        void Abort(params object[] abortParams);

        // TODO 其它

    }
}

在分析中,我们知道需要输入操作(比如等待点击菜单选项)。

所以,我们加入输入控制的方法:

        // 目前只写鼠标左右键,其它输入操作以后添加
        void OnMouseMove(Vector3 mousePOsition);
        void OnMouseLButtonDown(Vector3 mousePosition);
        void OnMouseLButtonUp(Vector3 mousePosition);
        void OnMouseRButtonDown(Vector3 mousePosition);
        void OnMouseRButtonUp(Vector3 mousePosition);

而且我们需要暂停功能(可能是游戏暂停,可能是切换动作时暂停上一个动作):

        /// <summary>
        /// 暂停
        /// </summary>
        void Pause();

        /// <summary>
        /// 重启
        /// </summary>
        void Resume();

最后,我们的剧本是持续运行的,需要每一帧都运行:

        /// <summary>
        /// 每帧运行:true继续运行,false终止运行。
        /// </summary>
        /// <returns></returns>
        bool Update();

我们有了接口,进而最好还创建一个空的类。

1.2 游戏动作类(Class GameAction)

我们的类只是完成了一些接口,和添加一些帮助方法。

创建类GameAction

using System;
using UnityEngine;

namespace DR.Book.SRPG_Dev.ScriptManagement
{
   
    [Serializable]
    public class GameAction : IGameAction
    {
   
        #region Fields
        [SerializeField]
        private bool m_DebugInfo = false;

        private IGameAction m_Previous = null;
        protected string m_Error = null;
        #endregion

        #
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值