pokemonlei

陈磊的博客 | pokemonlei

地平线零之曙光工具链

笔记,原视频:https://www.youtube.com/watch?v=KRJkBxKv1VM

本文只是将零散记录在onenote上的东西进行一个整合,将自己感兴趣的内容以更规整的形式记录下来,如需更详细的了解,自行参考原视频

1. 目标

零之曙光是沿用并修改了Decima引擎,以下面几个出发点为目标进行重构工具链与工作流程

  • 代码层面目标:
    • 创建一个方便构建工具的框架
    • 沿用强大的Decima引擎库
    • 让策划的工具更易使用
  • 编辑器层面目标:
    • 能够适配内容创作者工具需求
    • 添加编辑器上下文概念
    • 可重用的组件
    • 所有操作都位于一个编辑器中,提供集成的游戏开发环境

2. 蓝图节点编辑器

老生常谈的东西了,跟UE相比也没啥太大变化。
由于他们做音频的模块相对独立且对工作流有很明确的需求,所以以音频为入口进行工具改版,音频用蓝图来连逻辑大概这样

3. 游戏关卡编辑器

起因是他们之前一直用maya进行关卡编辑,但maya并不适合有大量任务系统和需要大量放置游戏GameObj的游戏,以能让设计师直接在引擎中方便修改关卡和放置物体为起点进行了设计

这里有一个抉择,是只将游戏中的某些子系统集成到编辑器中or全部集成,最终选择了全部集成(有一说一,这需要考虑吗,直接全部集成然后根据需求制作简单的测试关卡不就可以?)

  • 只集成关注的子系统,虽然可以让整个编辑器简洁可控,且运行快速,但代码复杂,且关卡编辑器里显示的跟游戏实际运行的东西不一样
  • 全部游戏内容都加到显示窗口里,会增加运行时开销,有一些系统如天气,在制作时并不需要整合全部的其他系统

他们的场景编辑器成品如下图:

  • 原视频里有简单的操作视频,用画刷等工具修改地形,添加野怪、障碍物

  • 最终效果,可以直接跑游戏,结束运行时编辑窗口会直接在结束运行的位置,然后直接修改场景,如刷地形,添加野怪和石头等,然后继续运行又会接着当前视口开始运行。其实就是一直以主角位置来定位

  • 由于游戏中有个仇恨链接机制,被一个机器人发现后同一片的其余机器人也会共享信息,做法是先创建一个父节点(我们称之为遭遇战节点,其下的机器人为同一组)然后在父节点下创建敌人,此时敌人就会共享父节点的数据

  • 资源重用,石头、敌人等资源都是可以直接拖进去就生效的

    4. 热加载、撤销

    为了让策划和美术们在修改了资源后不需要重新启动游戏,他们整了一套热加载系统:

  • 流程:编辑器内修改内容->分析修改的内容(相关引用)->打包成patch文件->运行中的游戏暂停->加载进新的patch文件->继续运行游戏

为了支持工具的撤销操作,做了个很巧妙的设计,对于工具所做的修改,并不是工具直接修改游戏,而是发送要修改什么的消息给游戏编辑器(引擎),编辑器进行最终修改,这样工具里所有的修改操作都是以一条条消息记录下来的,很容易支持撤销。没错,类似帧同步那个概念

5. 交互式对话编辑器

这里介绍的并没有那么详细,只说他们的系统受到CD Project RED和BioWare的启发。可以参考巫师3的对话系统:Behind the Scenes of Cinematic Dialogues in ‘The Witcher 3: Wild Hunt’:https://www.gdcvault.com/play/1023285/ ,去视频里看了一下确实讲的挺详细,这个后面单独启一个文章写

由于地平线的交互式对话是全新的,不依赖于任何其他系统,所以可以从头构建一个新的编辑器上下文来满足使用工具的团队,文案、任务、过场

  • 原视频里演示了一小段对话内容,是完全自动生成的对话视频,这个自动生成对话的系统除了音频(配音)之外,镜头剪辑,动画,手势等都是基于设定好的规则生成的,而且也可以自动生成机器人语音、口型和面部动画等等。这意味着设计师只需要输入对话内容就可以直接看到对话效果。

6. 世界地图overview

由于这种大地图开放游戏很难有个overview系统能够看出所有事情发生的时间地点等信息,所以他们研究了游戏数据的二维地图展示:

  • 这个系统可以显示任何他们想要知道的信息,如任务区域、可能遇到的敌人、性能监控等等
  • 这里这个JIRA如果是我知道的那个管理项目缺陷、需求、各种事物的JIRA工具(类似腾讯的tapd),那JIRA Bugs是指测试提的bug单,那这里能显示出JIRA里提的bug在游戏地图中的具体位置,那也太牛了。

关卡设计流程-空洞骑士笔记

用你目前所拥有的常识来理解问题,如果你目前的常识不支持你理解,则说明你缺少一个前置知识

文章参考视频:B站《空洞骑士》的关卡设计

1.任务设计流程

什么是任务?一件事,包含了几个要素:玩家要做什么事情、是谁让玩家去做这件事情、做完之后有什么奖励。

什么是任务流程?多个任务由于前因后果连在一起的时候,就产生了任务流程这个概念。大多数情况下,单个任务不能将一整个事件完成,所以任务流程就显得很关键。任务流程应该组合一个又一个小型的任务来诱导玩家去完成一个事件。如果上来我们就把所有内容都塞到一个任务中,那么他看起来就像是一个攻略,先去干嘛再去干嘛然后干嘛,显得很没意思。

什么是事件?事件就是一个完整的有前因后果的剧情内容,通常来说,完成了一个事件就等于完成了一个任务流程,游戏就是由大大小小的事件构成的,有的事件和主线相关很重要,有的则是用于丰富游戏剧情的辅助支线。事件和任务流程的关系?任务流程是组织玩家以一个角色的身份如何参与到这个事件的记事本。通常来说,事件就是一个单纯的故事或者剧情,然而任务流程却可以千变万化。如有一个简单的事件:某村子居民由于某些原因需要n个药草,这就是一个事件,那接下来就是为其设计任务流程,可以让玩家去某地采集,也可以让玩家去购买或直接给金币等等,任务流程会慢慢揭示讲述这个事件的进度,却不一定和事件本身有联系。

如果我们将事件看作是一个剧本,那么任务流程就是这个剧本当中,玩家的戏份

1.1 任务流程的结构图

以《空洞骑士》来看,最初在遗忘十字路口击败第一个boss的过程:

如果我们不击败Boss1,会发现哪里都去不了,右边的水晶峡谷需要荒芜俯冲才能去,左侧的翠绿之径需要击败第一个Boss,拿到第一个远程技能才能打败看守翠绿之径的第二个Boss。所以如果玩家不去打第一个Boss,那么探索路径差不多是这样的:

所以看起来遗忘十字路通向很多地方,但是最初的时候它却是锁死的。我们用方块表示锁,用菱形表示该锁的钥匙。所以假设没有第一个Boss,那么游戏的设计就是这样的,根本没有通关的方法。

只要打败第一个Boss,就可以获得打败Boss2的方法,相当于拿到了前往翠绿之径的钥匙。此时设计图变为:

从遗忘十字路前往翠绿之径需要钥匙1,于是遗忘十字路中必须给出获取钥匙1的方法,无论要求是什么,可能是击败一个Boss,也有可能是别的什么。在开头的视频中,提到了这种构图的思路:

看第一条从上往下的线,Start是开始游戏,那么要到达End,需要同时通过锁A和B,再看第二条线,要拿到钥匙B,则先要通过另外一个锁A,最后第三条线,我们可以在某处找到钥匙A,这样我们可以回到第二条线解开锁A拿到钥匙B,最后同时拿着钥匙A和B去通关。视频中用这种构图来描绘了空洞骑士的任务流程。当然,我们会实现规定一些标记,在空洞骑士中主要是三类,Boss战,钥匙,锁:

那空洞骑士整体的通关流程大概是如下图:

按照上面的解释,这个图就很容易看懂了,可以注意下有时候锁可以不是硬锁,如当拥有了钥匙2之后,我们可以返回遗忘十字路来解开锁来到真菌之地,但是也可以不拿钥匙2直接通过翠绿之径前往,如果通过翠绿之径前往,但是钥匙2的作用不仅仅是为了让你来到真菌之地,它还是获取钥匙3的前置条件。

1.2 任务流程的引导性

如果玩家按照错误的流程进行游戏,那可能产生意想不到的bug,如做完第二个任务才去做第一个任务,也会让主线故事的叙事变的错乱崩溃,玩家还有可能无所适从不知道下一步要去哪里。此类游戏以及RPG游戏一般都会以各种npc对话、任务、剧情等方式引导玩家下一步要去哪里做什么,并通过硬性阻挡保证玩家按照正确的流程进入设计好的区域和剧情。此类很常见不赘述,后续有时间可以写一下“塞尔达传说”中大世界的引导性方案

2.地图设计

  • 绘制简单的草图可以让我们开始进入到制作游戏关卡的状态。在这个阶段,一切都是可以被修改的。草图涵盖的东西可以是关卡,可以是界面UI,也可以是很多其他的东西,它们的作用除了帮助我们自己分析和打磨原型,更主要的作用是用于记录日志和向其他人说清楚策划想法。

  • 要明确差不多要做一个多大的地图,具体有哪些主要的元素构成。然后再将其分割成单独的区域,有了区域之后我们再将整个区域给分为一批关卡设计的组合。从蔚蓝开发者的演讲当中,我们可以看到这个模块化的思想,从Game到Area,再从Area到Levels。每个关卡都在讲述一个非常简单的故事。

  • 要善于借鉴,且应当善于分析别的作品当中的地图设计的优点,尝试将这种优秀的设计融入到自己的地图设计中。

  • 最好可以明确地图的需求或预期体验,围绕地图是为了满足什么或想要达到什么样的预期体验而设计,会事半功倍。

    2.1 引导性在地图设计和任务流程中的体现

    游戏中,引导性这个概念可以融入不同的元素中。

  • 常见的RPG类游戏是融入到任务中,会有npc告诉我们要去哪里做什么事情,这类游戏地图在局部做稍微的改动不会有太大影响,如换个boss位置和城镇区域替换。

  • 而空洞骑士这种则是融入到了地图中,他们将所有能够对玩家产生引导性的元素都集中到了地图中,这就要求地图的设计精益求精一环扣一环。

    如果我们有一个任务体系来引导玩家前进。在地图设计上就可以稍微松散一点。不需要什么精巧的设计,也不用像空洞骑士一样像齿轮一样组合在一起。如果没有,我们则需要更加细致的去应对地图的设计。但是相对的,在任务的设计上就要更加细致。也就是无论如何,我们的任务流程设计必须是有的。

    2.2 地图设计的层次重点:以蔚蓝和空洞骑士为例

    同样都是对地图设计比较细致,那么蔚蓝和空洞骑士的区别又在哪呢?我们发现蔚蓝的开发者几乎在每一块落脚处的设计都精益求精,而空洞骑士似乎没有如此严苛。在蔚蓝的开发者的GDC访谈中,提到的关于Game,Area,以及Level的三个等级。蔚蓝的开发者则倾向于把重点放在Level上,而空洞骑士的开发者则倾向于把重点放在Area上。这就是两者在地图设计上的核心区别。简单分析下原因:

    首先蔚蓝是一个平台跳跃游戏,玩家的核心体验是流畅的操作感和精准的控制感。这种线性的设计需求让蔚蓝的开发者把所有的重心都放在了单个的小型的关卡的设计上。在绝大部分的蔚蓝的小型关卡中,玩家的核心目标想方设法的从A点移动到B点。在主线中(即玩家不以收集草莓为目标),玩家几乎不怎么会遇到岔路口,即使遇到,这些岔路也不会将玩家带离太远的距离。
    在GDC的采访视频中可以看到,蔚蓝的开发者会先将一个个小型的关卡设计完毕。之后通过一个编辑器将它们组合在一起。但是我想空洞骑士的开发者则会相反,比起单个的小型关卡是如何呈现的,他们首先应该确定的是区域之间的联系。将区域划分好之后开始逐步的设计小型的关卡。

    蔚蓝中的游戏体验是线性的,虽然空洞骑士也在营造一种玩家是在探索线性关卡的假象,但是事实上玩家可以随心所欲的探索,只是关卡的设计的精巧让玩家感觉自己似乎是按照一个既定的路线在探索。但很多时候可能都是误打误撞正好打了一个可以打的Boss,拿到了对应的道具而已。这种设计正是开发者所期待的,他们希望玩家感受到的就是自己在探索一个开放的世界。
    总的来说:在模块化的过程中,必然会开始设计大地图,区域,以及区域中的小关卡设计。认识到这个概念,可以结合具体的案例来探讨一下应该把重心放在什么位置。

    2.2 单向阀门

    所谓单向阀门,就是只能从一侧打开的门,但是打开后就是个双向通道。这个概念在游戏中的应用场景很多
    依然以空洞骑士中的遗忘十字路口击败第一个Boss的地图探索过程举例:

    当玩家从达特茅斯下来之后,如果直接去打第一个Boss,必然会绕一个大的圈子。这种设计不是巧合而是有意为之。假设这个单向阀门是封死的,尝试再去游玩一下,会发现,打败了第一个Boss之后,如果想回到达特茅斯,还是要按照原路返回,绕一个大圈子。但是反过来,如果没有这个单向阀门,几乎不需要任何的探索,玩家似乎就可以直接触摸到Boss。有了这个单向阀门,玩家需要通过一个既定的路线的冒险,探索,才能接触到Boss,而不是在家门口就遇见Boss,这样开发者在有限的地图当中,构建了一个路线较长的探索,但是玩家探索结束之后,又不用再原路返回,只要打开了这个单向阀门,以后就可以自由往返了,削弱了重复探索的疲劳感。

    当然游戏中的单向阀门不一定是这么具象的表现,比如勇者斗恶龙里的传送技能,只能传送到去过的镇子,说白了,这样的一个传送装置,当游戏一开始的时候,是哪里也去不了的。也就是去到第二个镇子的时候,玩家还是需要一步步走过去,之后就可以通过传送装置来传送。之后在两个城镇之间往返就不再需要徒步旅行了。这样的设计使得玩家不用再反复的去探索已经走过的地方(这样既花时间,也没有什么意义)。还有各种传送站点等等。

    我们前面提到过一个概念就是往返,如果一个游戏需要在两个点之间往返,就需要设计这样的地图,那么怎样在往返的时候消除重复探索的疲劳感呢?上面的设计可以总结为以下三种:

  • 空洞骑士风格,终点即起点(但必须在终点处改变地图,此处的改变地图具体指打开那个单向阀门)

  • 勇者斗恶龙风格,终点提供了可以传送回起点的装置,之后就可以来回传了

  • 给定一条更简单的从终点返回起点的路线(当然这条路线必须有效的防止玩家把这条路线也当成从起点到终点的路线)

游戏设计信条(二)

  1. 事件必须激发某种情感才有意义

  2. 游戏设计师必须能够感知转瞬即逝的情绪,比如气恼、欢乐、厌恶、紧张、刺激等,因为这些情感才是游戏存在的真正意义。

  3. 那些教导玩家进行创造、社交活动、以及战斗的游戏总是最受欢迎,因为他们所展示的技巧有助于人类繁衍,从本能上就会让人想要学习掌握

  4. 基本的情感触发器包含如下几个:

    • 学习引发的情感
    • 角色弧线引发的情感
    • 挑战引发的情感
    • 社交引发的情感
    • 财富引发的情感
    • 音乐引发的情感
    • 场景特效引发的情感
    • 由美而引发的情感
    • 环境引发的情感
    • 新技术引发的情感
    • 原始威胁引发的情感
    • 性暗示引发的情感
  5. 学习引发的情感:

    • 一种知识越是复杂和难以掌握,学会它的成就感就越大。所以对于游戏设计师来说,挑战在于需要创造出具有很多层不明显特性,有待玩家发掘的游戏系统。要设计出一个有深度的游戏,需要层层揭示信息,并且每一层都构建于前一层的基础之上。如MOBA,段位越高所掌握的信息和技巧就会越多越难
    • 领悟:当玩家得到某些新的信息时,如果他突然明白了原有的一些信息的含义,那么他就是有所领悟。领悟是由于获得了一个新信息而引发的其他知识之间的连锁反应。当我们补全了逻辑链上缺少的最后一个部分而使得逻辑条理清晰时,领悟现象就会出现。在经历了一长串的信息构建之后,所有这些信息各归其位,产生了明确的含义,这就是最棒的领悟方式。
  6. 我们从他人身上感受到的情感会在自己身上反映出来。角色弧线满足了一种特别的求知欲:我们热衷于了解自己的同类,我们对他人的内心挣扎尤其感兴趣,因为只有在冲突过程中,人的内在价值和能力才会展现出来。他们面对的冲突越强烈,我们对他们真实本性的了解就越深入。我们对一个英雄选择脱脂牛奶还是全脂牛奶不感兴趣,可是当他必须在妻子和自己的性命之间做出选择的时候,我们会好奇这个英雄会何去何从。

  7. 挑战引发的情感,当我们努力迎接挑战的时候,会进入到一种快乐的、精神高度集中的状态,当通过这些测试时我们会感觉自己充满力量无所不能,即使失败了,只要玩家感觉到有可能成功,他们也会再尝试一次并试图做得更好。

  8. 社交引发的情感:

    • 社交引发的情感不止局限于游戏内,游戏外也可以,比如:家人之间找一个能够长时间交谈的机会,父子之间一对一交谈时间久了难免别扭,而当他们一起参与一项不需要思考的游戏时,这种障碍就迎刃而解了。所以游戏简单不用动脑子不一定是缺陷,可能就是游戏本身特性。如果游戏过于复杂反而会影响参与者之间的交流。
    • 游戏内的社交,多数游戏都会使用明确的事件来引发玩家之间交互,如击败某玩家,一起合作创造了某个东西或者一起完成了某个挑战。但每一种社交事件都要有效的改变对人来来说有价值的事情的状态,如陌生人变成朋友,地位从低到高等。
  9. 音乐引发的情感:音乐是一种强大并且灵活的可以产生情感的工具。由于音乐可以轻易地融入其他体验之中,许多媒体都会大量使用音乐。与大多数情感触发器相比音乐是及其微妙的,因为我们在听到音乐时并不会刻意的去关注它,但是即使主观意识没有关注音乐,我们的潜意识仍然会将音乐源源不断的转换成对应的情感。听一下游戏的原生音乐,你就可以重现很多游戏中的感觉。音效可以制造情感,如:

    • 金属发出的刺耳声音会让人觉得不舒服
    • 心跳声可以制造悬念
    • 下雨声会让人感觉沉静
    • 挤压流体状的东西会让人感到恶心
  10. 美并不是一个事物所具有的某种特征,而是事物对我们的影响。即便只是看到美的事物也会让人感觉身心愉悦。

  11. 沉浸是最强大的游戏体验之一,沉浸指的是玩家自己的思维和他在游戏中的角色融为了一体,于是发生在游戏角色身上的事件对玩家来说也意义重大,就好像这个事件是真实的发生在玩家自己身上一样;当玩家的体验能够反映游戏角色的体验时,沉浸现象就会出现,这意味着玩家需要听到看到和游戏角色一样的东西,也要想到和感受到和游戏角色一样的东西。如同样害怕、好奇、生气等。可以理解为一种心理镜像。

  12. 肉眼与耳朵捕获到的战斗信息经过大脑处理后,获得是否命中,什么时间命中,攻击威力多大,受击者做出怎样的受击表现,攻击者如何卸力收招,这5个问题的答案,如果与游戏给予的反馈一致,那就是好的打击感。

游戏设计信条(一)

  1. 向游戏中注入自己人生的观点和看法

  2. 各行各业都接触一些,不要只局限于游戏动漫

  3. 游戏应该让玩家感觉到自己拥有在现实中所没有或很难拥有的能力与特点,比如强悍、聪敏、富有、飞翔、成为英雄,又或者养一只宝可梦等等

  4. 思考游戏的包装、海报宣传等周边设计,往往可从另一个角度来反馈到游戏玩法上

  5. 从一个“有趣”的创意出发,在游戏开发过程中慢慢剃掉“无趣”的部分,剩下的就都是有趣的了

  6. 剧情三角论:角色->世界->事件,三个只能突出一个,任何多选组合都会让玩家觉得不爽,因为玩家无法聚焦,会导致看不懂在讲什么的问题

  7. 问:怎么从一个大概想法,演变到一个成型的地图和玩法的?

    • 首先验证最小集合,验证完毕后去在之前的框架中做填充扩展设计,对于新人可以先走第一步,把核心最小集拉爆,看具不具备可玩性,是否有创意
  8. 游戏角色的动作一定要有个性

  9. 如果创造角色时从游戏的个性出发,那么最终你会自然而然的想出很有趣的动画和游戏细节,很多角色的动机也不止一个

  10. 画好游戏角色的剪影,清晰鲜明的游戏剪影可以:

    • 一眼能看出角色大概的性格
    • 区分于其他角色
    • 辨识敌我
    • 角色在场景中跃然而出
  11. 游戏应该允许玩家自定义一些东西以展示自己的个性空间,如:

    • 名字(角色、宠物、等等)
    • 外貌
    • 时装
    • 家园
    • 武器(外形组装,强化特效,武器装扮等)
  12. 设置一个NPC最基本的考虑点:玩家在游戏里想要什么,给他提供什么

  13. 墨西哥披萨理论:把两种你认为很不搭调的东西放在一起,有可能会产生意想不到的惊喜。

  14. 可以多留意主题公园的平面图,主题公园的规划设计往往能用最有效的方式引导玩家从一次冒险进入下一次冒险

  15. 确定关卡的主题:逃亡生存、探索、教育等。除了这些目标,还需要问自己:“在这关里玩家的目的是什么?”,是教会玩家一些特殊操作还是提供一些物品。这个问题的答案能为自己指明方向,发现这一关游戏性设计的要点,使玩法层出不穷。

  16. 如果在游戏整个进程中,某个游戏玩法只使用了不到三次,那它的价值就没有得到充分利用。

  17. 最棒的游戏概念可以用一个或几个动词来描述,如:跳跃、收集、攀爬、设计、探索、透支、潜行。

  18. 大多数人都习惯游戏从左往右行进,如果让角色从右往左走会让玩家感觉心神不宁,即使他们说不出来为什么。把这个方法用在玩家进入游戏最后Boss的老窝时效果最有效。

  19. 花点时间解构那些同类游戏里最优秀的机制和行为,这会为你的游戏带来不可估量的好处。

  20. 玩家想要那些使他们看起来很酷的游戏

  21. 困难和挑战之间存在着差别,困难=增加痛苦和损失,挑战=提高技巧和上升空间。这两者之间的平衡称为趣味曲线,趣味曲线上有一个点,越过后挑战性急转而下剩下的只是痛苦和挫败感。不让玩家越过这个点的方法是创造“阶梯式递增的玩点”,设计者应该把一个玩点建立在另一个玩点之上,这些玩法要素随着游戏进程相互结合并缓慢提高难度。

  22. 在无聊和困难中间有一个点,位于这个点的玩家全神贯注,丝毫意识不到时间的流逝

  23. 设计精良的强化道具就是一次高度浓缩的行动,它对玩家的影响要是立即生效的。设计强化道具时,设计师应该开动脑筋,琢磨一下以下几个问题:

    • 强化道具有什么用
    • 长什么样子,在整个游戏世界里他怎样凸显出来?发光闪光?旋转跳跃?
    • 强化道具可以互相组合吗?还是玩家每次只能使用一种?
    • 它怎样影响玩家的行动?影响移动速度?影响攻击的次数还是类型?影响生命值还是属性?
    • 它产生的影响如何让玩家知晓?通过视觉上的变化还是声音提示?
    • 为了使用强化道具,玩家需要付出什么代价?在某些强化道具的影响下,玩家的速度或移动性会降低,或者可以采取的行动类型会减少
    • 如何强化道具的影响是暂时的,那它快消失时用什么线索提醒玩家?HUD的元素还是视觉效果or声音提示?还是说直到玩家死亡效果才会消失。
  24. 大型多人在线角色扮演类游戏,有下述内容能使游戏更饱满,更有竞争力

    • 允许玩家在游戏中扮演某个特定角色拥有特定技能,如奶妈可以给全体队友回满血
    • 捏脸,可以在游戏里更进一步鼓励定制角色,让玩家购买或赢得适合其个性或职业所处阶级的衣服、如DNF的时装
    • 聊天,游戏内社交的基础
    • 生产技能,玩家的副职业,制作出来的东西最好容易辨识,比如梦幻西游里的装备会有玩家名字。制作过程可以加入带有技巧的小游戏加速生产速度或者成功率
    • 经济系统,最好发展到现实世界
    • 刷怪,升级速度越来越慢就会导致要刷怪,刷怪通常是人为的延长游戏时间,浪费玩家时间让他们感觉受挫。但“刷怪是一项低风险的活动,玩家可以通过简单重复这一活动获取实在的收益,在存在刷怪的游戏里刷怪就是最佳措施,问题不再是对玩家来说什么才是最佳措施,而变成了在玩家忍无可忍之前,能通过刷怪得到多少好处?”,关于刷怪可以做如下尝试:
      • 如果内容太相似,就会感觉重复和疲惫,增加点变化进去,如DNF的深渊
      • 玩家去刷怪是因为他们缺少力量、能力或者金钱而无法更进一步,让游戏难度平缓一些,而不是陡然徒增
      • 给玩家更多自由,不要总是迫使他们跟随设计者定义好的目标
      • 提供除了金币和经验以外的其他奖励,那刷怪行为就可以变得不那么像“刷怪”
      • 为刷怪做专属奖励,提供成就或特殊点数
      • 做减法,游戏市场或胜利条件缩短,剑与远征的刷怪就做的相当精简
    • 道具收集,做一些在提升战斗能力之外,还能提升游戏内其他能力的道具,特别是那些非常枯燥冗长的东西,比如生产技能挖矿或采集。大部分道具都能按照稀有度分类,设计些只有打败特定敌人才能得到的道具,或者特定季节特定时间段才能得到的道具
    • PVP,只有玩家与玩家的对抗才能衍生出无穷的乐趣,玩家也需要通过打败其他玩家来验证自己多厉害。但不能让玩家玩兴正浓时被突然干掉。最好只有特定地点才能PVP,比如PVP频道或者限制城镇里不能PK
    • 避免猎杀行为,猎杀是指一个玩家通过反复杀死另一个玩家而对其进行骚扰的行为。但可以像APEX里一样将比较强的玩家做个辨识度,标记出上一局获胜的玩家
    • 工会,玩家是社会性动物,因此会形成群体。需要再游戏中制造一些用于工会举行社交集会的场所,记得设计一些有利于工会行动的工具,如状态追踪、团战日程表以及工会资产分配等
    • 玩家住所,给玩家一个私人空间,供他们炫耀成就,展示纪念品。有一个基地会让玩家感觉同游戏世界的联系更加紧密,也更有“在自己家里”的感觉,这会把游戏世界变成一个他们乐于一次又一次回来的地方
    • 团战,应该创造出能够靠不同职业组合攻克的副本,甚至可以靠玩家出奇招或者单纯靠运气取胜。创造出这些团战的目标,并且精心雕琢他们,让玩家知道他们得提升自己的实力才能打败它们。设计一个便捷的方式,让玩家在团战过后能够轻松的按照个人偏好分配战利品。
    • 交易拍卖,玩家可能会攒下一大堆完全相同的自己用不到的东西,让玩家能够简单公平、互不欺诈的完成交易。在游戏世界里创建利于交易的地点。
  25. 设计多人关卡步骤:

    • 规划关卡
      • 玩点是什么?玩点的类型决定着关卡的设计,是类似LOL的红蓝双方对抗,还是类似守望先锋那样的推车,又或者是CSGO、吃鸡那种布满掩体的射击场景
      • 剧情是怎样的?玩家为什么在这个地方战斗?了解剧情会帮助你设计出能够讲述故事的关卡物品
      • 什么让你的地图难忘?对于一个新手玩家来说,最难的事情就是一边熟悉关卡一边活下去。有辨识度的几何形状以及关卡物体有助于在玩家刚出生的那一刻找到自己的方向
      • 为各种类型进行设计,很多多人游戏里都有不同角色,确保为每个类型的玩家设计出能让他们发挥出最佳水平的有趣空间
    • 制作关卡地图
      • 地图要简单,对玩家来说在一个简单的地图中更容易搞明白怎么走,路和开放空间要使用简单的形状,比如方形圆形8字型。更容易引导玩家的同时也方便做出调整
      • 镜像地图,拿出地图设计稿复制反转黏贴,这样做不仅能节约开发时间,而且有助于玩家探索出自己的领域,等他们踏入敌人老巢,也能更好地知道如何前进
      • 设置防御区,可以让玩家大概知道战斗会在哪里发生,进而制定相应的策略
      • 利用好出生点,给玩家一个活着离开出生点的机会,给蹲点虐泉的玩家造成困难
      • 确保玩家能找到该走的路
      • 提供备用的接近路线,允许玩家使用备用路线,会让他们觉得自己很聪明,还能制造一种鬼祟潜入的氛围,同时也给游戏增加一点不可预测性
    • 建造关卡
      • 检查碰撞,确保关卡中没有会让玩家卡在几何体当中的位置
      • 试玩测试,用热力图,即标记玩家去过的地方以及游戏过程中都做了些什么的图,来决定玩家应该在哪里战斗、哪里躲藏、死在哪里。利用这些数据来调整你的地图。目的是设计出一个到处都可供玩家游戏的空间,而不是让所有人都挤在一起
      • 颜色,颜色能快速让玩家弄明白身处哪个关卡。玩家会把每个关卡和它的配色表关联起来。也可以利用颜色理论来帮助烘托气氛:绿色让人感觉湿冷,红色让人感觉危险,蓝色让人感觉静谧

UE4GM系统

UE4的GM系统是基于UCheatManager开发的

1.处理GM的流程图

上图是客户端的处理流程,DS服务器上的处理流程大致类似,只不过玩家在DS上是一个NetConnection,所以PlayerController中保存的UPlayer的派生不是ULocalPlayer,而是UNetConnection。

2. 启用GM

默认情况下,GM只会在(GetNetMode() == NM_Standalone || GIsEditor)情况下才会启用,也就是说只要不是单机也不是编辑器下运行,默认是不会启动的,需要在PlayerController里手动调用EnableCheats(),此时只要构建类型不是SHIPPING和TEST,就会启用GM。当然也可以根据需要直接调用AddCheats(true)不论何时都启用。

3.如何添加自己的GM指令

添加自己的指令也比较简单,通过继承UCheatManager来实现自己的派生类即可,自己的GM类里实现具体的GM指令,方式如下:

1
2
UFUNCTION(exec,BlueprintCallable,Category="Cheat Manager")
void MyGMName(arglist);

其中UFUNCTION中的exec是必须的。

写完自己的GM类后,需要设置PlayerController中的CheatClass为自己的GM类,之后直接在控制台输入 MyGMName args 即可调用到自己的GM实现。

4.一个可在客户端远程调用DS执行GM的方案

由于有一些GM,比如添加物品,要在DS服务器上调用然后同步结果到客户端,而我们又不能直接在服务器上输入只能在客户端中输入,那就需要一种方式将输入的GM传给服务器。

这里用到的就是两个:UFUNCTION(exec) 和 UFUNCTION(Reliable, Server, WithValidation, BlueprintCallable) 函数,比如
UFUNCTION(exec)
void ServerGM(const FString& cmd);

UFUNCTION(Reliable, Server, WithValidation, BlueprintCallable)
virtual void ServerGM_RPC(const FString& cmd);

其中ServerGM用来供客户端执行,在函数内通过ServerGM_RPC将客户端想要执行的GM命令和参数同步给服务器来执行。

实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
void AMyPlayerController::ServerGM(const FString& cmd)
{
//下面是从引擎源码的UPlayer::ConsoleCommand中抄过来的一段代码,大概作用是使用 | 分隔符处理多段的GM指令
const int32 CmdLen = cmd.Len();
TCHAR* CommandBuffer = (TCHAR*)FMemory::Malloc((CmdLen + 1) * sizeof(TCHAR));
TCHAR* Line = (TCHAR*)FMemory::Malloc((CmdLen + 1) * sizeof(TCHAR));

const TCHAR* Command = CommandBuffer;
FCString::Strcpy(CommandBuffer, (CmdLen + 1), *cmd.Left(CmdLen));

// 使用'|'分隔符处理多段GM指令
while (FParse::Line(&Command, Line, CmdLen + 1))
{
ServerGM_RPC(FString(Line));
}

FMemory::Free(CommandBuffer);
CommandBuffer = nullptr;

FMemory::Free(Line);
Line = nullptr;
}

void AMyPlayerController::ServerGM_RPC_Implementation(const FString& cmd)
{
ConsoleCommand(cmd, true);
}

此时如果3中的MyGMName需要在服务器上运行,那客户端执行:ServerGM MyGMName args 即可。
整个流程大概是:

  1. 先按文章开头的照流程图在客户端中执行GM,流程图最后一步UPlayer::Exec会在PlayerController上执行ProcessConsoleExec(),从而调用PlayerController的ServerGM函数,并把MyGMName args当做字符串参数传进去。
  2. ServerGM里一顿操作后,通过RPC,在服务器上调用ServerGM_RPC并将字符串MyGMName args 作为参数
  3. ServerGM_RPC直接调用ConsoleCommand,即直接走到了流程图中的这一步
  4. 之后就是按照流程图中,调用UPlayer派生类UNetConnection的Exec,然后走到我们自己的CheatManager,调用MyGMName

python与深度学习入门一

深度学习(deep learning)

深度学习(英语:deep learning)是机器学习的分支,是一种以人工神经网络为架构,对数据进行表征学习的算法。观测值(例如一幅图像)可以使用多种方式来表示,如每个像素强度值的向量,或者更抽象地表示成一系列边、特定形状的区域等。而使用某些特定的表示方法更容易从实例中学习任务(例如,人脸识别或面部表情识别[6])。深度学习的好处是用非监督式或半监督式的特征学习和分层特征提取高效算法来替代手工获取特征。
深度神经网络,卷积神经网络和递归神经网络已经被应用计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。