原标题:RPG游戏中的剧情在Unity3D中如何实现呢?

RPG游戏想必不用多介绍了,剧情系统是RPG游戏中必不可少的功能。

曾经听过一些朋友谈论:目前正在做一款RPG游戏,但是不知道如何实现RPG游戏中的剧情,仅仅实现了对话系统,主要问题在实际开发过程中发现,对话系统需要和人物动画、摄像机镜头等多个方面进行耦合,希望能够通过外部的配置文件来配置这些细节,使用脚本来进行处理,但是却没有好方法。

问题确实很多,但是静下心来仔细想,还有有一些思路的。

如果你认同代码即数据,c#就是一个不错的脚本语言。

我有两个观点的,请往下看:

首先需要明确剧情系统的目标:

剧情所要解决的核心问题就是:

如何调度不同的系统来处理分布在时间轴上面的剧情命令;

核心解决思路就是两个:

系统分层和协程。

制作RPG游戏的剧情需要有不同的系统协作:如同拍摄电影电视剧一样,最重要的是导演,负责调度控制剧情流程,而剧情的具体流程类似于剧本,影视剧中的剧本书写方法大部分都应该是:

首先确定拍摄的环境地点,人物

接着一行,一行描述,对话,镜头,人物的相关行为;

既然如此,我们制作游戏剧情也可以按照影视剧中剧本书写方法的流程来实现我们的功能。因为,游戏剧情系统做到最流弊的就是让玩家看起来就像看电影一样,对吧!越华丽越秀越好,当然了为了满足不同的玩家,我们也要添加跳过功能,因为,有一部分玩家就不喜欢看剧情,所以我们要贴合玩家。如果剧情做的特别好,就想给玩家看,但是玩家又不爱看怎么办呢,我们可以设置一个小奖励,比如观看完当前剧情,会给玩家发点虚拟物品,这样就会令一些不爱看剧情的玩家,也会去默默的观看剧情啦!咳。。咳。。,题外话说多了,继续我们今天的内容!

总之我们的目标就是,将剧情的配置方式完全参考电影剧本来做,采用命令模式描述就是:

场景 1 野外1;

创建玩家在 0,0点上;

创建怪物在 5,5点上;

UI展示剧情对话1,玩家头像:内容 → 你瞅啥?;

UI展示剧情对话2,怪物头像:内容 → 瞅你咋地!;

玩家 → 发动攻击;

延迟1s(攻击动作有延迟);

生成攻击特效;

拉近镜头到玩家身上;

如果要实现上面这种基于命令的配置方式,需要实现以下内容:

系统分层:

对话,UI,镜头控制,角色控制等是游戏中的不同系统,这些不同系统对外提供一些接口,用于实现对剧情展示的支持;

导演剧本:

针对每个剧情书写特定的剧本,来编写类似于与上面的剧情命令脚本;

开发量更小的方法,使用unity自带的协程来书写,类似于这样:

IEnumerator StoryProgress

{

yield return StartCoroutine(CreatePlayer);

yield return StartCoroutine(CreateMonster):

yield return StartCoroutine(ShowUI("Hello world"));

yield return StartCoroutine(WaitForEvent("MonsterDie"));

}

这样一个导演剧本是独立于所有系统的,只负责组织和操控其它系统;

通过协程我们可以实现,等待特定事件,等待某个操作结束,等待一定时间,而这3个能力,就可以实现一个优雅的线性的剧情描述了。

而只需要在合适的时候,执行上面的 StoryProgress,就可以做到通过特定的事件来触发特定的剧情。

当然你需要注意一点,在播放剧情之前,可能需要对当前游戏环境进行清理,例如网络游戏中,隐藏其它玩家,隐藏其它不相关怪物,等等。

而要开发相关的剧情编辑器的功能就是,将编辑好的时间轴生成相关的StoryProgress的c#代码即可。

至此一个优雅的剧情系统就完成了。

一个简单参考实现:

当然上面描述了这些,只解决了一个底层问题,即如何组织一个剧情故事;

而上层问题是,如何设定在合适的条件下,触发某个剧情,设计思路如下,首先设定某个剧情,在满足哪些条件的情况下触发;

例如:满足和Npc1对话过,和Npc2对话过,要和Npc3对话,背包里面有物品item1;

而剧情触发经常是在处理要和Npc3对话时,对条件进行检测;

因此需要在系统中存系统的条件变量,例如主线任务进行到某一步的条件变量;

当和某个NPC对话时,触发剧情检测,若条件变量满足,则触发剧情。

因此需要设计:主动触发剧情检测的观察点,系统的条件变量,以及满足哪些条件触发某个剧情相关配置。

举几个检测点的例子:

1:在和某NPC对话时检测剧情条件是否成立;

2:在进入场景的时候检测剧情条件是否成立;

3:在进入某个区域时检测剧情条件是否成立;

责任编辑:

unity游戏中提示信息如何实现_RPG游戏中的剧情在Unity3D中如何实现呢?相关推荐

  1. 【Unity3D 游戏开发】transform.Find查找游戏对象

    transform.Find查找游戏对象 作为一个新手,因为在这一个地方修改了一个上午,为了以后方便查找于修改,特做笔记纪录. 若有不精,还请各位dalao指教. 起因 刚开始,跟着教程做少许修改,在 ...

  2. Unity3D中实现简单的电影模式框架

    Unity3D中实现简单的电影模式框架 游戏中,经常会有这样的需求,即播放一段电影,给玩家更好的体验.比如摄像机朝向某两个NPC,两个NPC在那里交谈之类的. 在用Unity3D制作游戏的过程中,也经 ...

  3. unity游戏中提示信息如何实现_Unity编辑器操作面试题集锦(上)

    1.请描述游戏动画有几种,以及其原理. 答案:主要有关节动画.单一网格模型动画(关键帧动画).骨骼动画. 关节动画把角色分成若干独立部分,一个部分对应一个网格模型,部分的动画连接成一个整 体的动画,角 ...

  4. 学习在Unity中创建一个动作RPG游戏

    游戏开发变得简单.使用Unity学习C#并创建您自己的动作角色扮演游戏! 你会学到什么 学习C#,一种现代通用的编程语言. 了解Unity中2D发展的能力. 发展强大的和可移植的解决问题的技能. 了解 ...

  5. 学习用C#在Unity中创建一个2D Metroidvania游戏

    学习用C#在Unity中创建一个2D Metroidvania游戏 你会学到: 构建2D Unity游戏 用C#编程 玩家统计,水平提升,米尔和远程攻击 敌方人工智能系统 制定级别和级别选择 Lear ...

  6. unity中创建游戏场景_在Unity中创建Beat Em Up游戏

    unity中创建游戏场景 Learn how to use Unity to create a 3D Beat Em Up game in this full tutorial from Awesom ...

  7. Unity游戏开发——Excel数据读取到游戏中

    C# Unity游戏开发--Excel中的数据是如何到游戏中的 (一) 引言 现在做游戏开发的没有几个不用Excel的,用的最多的就是策划.尤其是数值策划,Excel为用户提供强大的工具,各种快捷键, ...

  8. 【Unity VR开发窍门】如何在Unity中以VR视角捕捉游戏360度全景

    [背景] 经常看到有VR游戏中玩家可以在虚拟场景中拍照的功能,所以打算做一篇系列帖子,主要介绍三个功能,第一个功能是如何在Unity VR项目中从玩家视角捕捉游戏全景,第二个功能是如何将这个捕捉到的全 ...

  9. Unity中输入模块与控制模块与游戏实际表现的处理

    向格斗游戏,我们通常有一个输入模块来处理我们输入的各项指令,如按下了什么键. 控制模块就是处理游戏按键对应于什么游戏的表现,这个是一个映射的模块.比如,我按下了space键,那么人物就会跳跃. 在我制 ...

最新文章

  1. C# 装箱和拆箱[整理]
  2. Polygon for the Angle
  3. 个人阅读 代码大全的阅读与提问
  4. python 倒叙 数组_Python函数合集:68个内置函数请收好!
  5. 光纤连接器百科小知识
  6. github怎么自动更新被人更新过的项目_GitHub 的这 8 个实用技巧,95%的人不知道...
  7. 技术动态 | 清华大学开源OpenKE:知识表示学习平台
  8. windows 安装PyAudio库
  9. 数组名不等于指针---sizeof()函数求数组大小错误问题
  10. [导入]刚拿积蓄救人 自己又患癌症(我身边的一个真实故事)
  11. python接口自动化测试框架_Python3+Requests+Excel完整接口自动化测试框架的实现
  12. 苏三30篇原创高质量文章汇总
  13. 割点(tarjan算法)
  14. 【2020年TI杯江苏省大学生电子设计竞赛回顾——C题:坡道行驶电动小车(江苏省二等奖)】
  15. 移动网优大神VoLTE学习笔记(四):主叫信令流程
  16. 解决linux下sudo更改文件权限报错xxxis not in the sudoers file. This incident will be reported.
  17. 小游戏1024纯C语言
  18. 【Verilog零基础入门-边看边练】学习笔记——第七讲 时序逻辑代码设计和仿真(三角波发生器)(一)
  19. HTML制作一个汽车介绍网站【大学生网页制作期末作业】(汽车首页 1页 带psd)
  20. 生产注意事项(分片集群)

热门文章

  1. 芋道 Spring Boot 对象转换 MapStruct 入门
  2. 算法题目:寻找迷失的数字。
  3. 百度人脸识别sdk图片转码的问题
  4. 如何成为一名Top DevOps Engineer
  5. c++求矩阵的秩_常见的矩阵分解
  6. Error: Exported bands must have compatible data types; found inconsistent types: Float64 and Float32
  7. 出价策略正在学习周期是多久,工作日修改和周末修改影响效果么?
  8. 最新 MySQL for Excel的安装教程与功能介绍
  9. 手写楚列斯基分解(楚列斯基因子分解) Matlab代码
  10. NLP01(自然语言处理)第一章 绪论