Unity高级项目实战课件01点击动作游戏精讲_第1页
Unity高级项目实战课件01点击动作游戏精讲_第2页
Unity高级项目实战课件01点击动作游戏精讲_第3页
Unity高级项目实战课件01点击动作游戏精讲_第4页
Unity高级项目实战课件01点击动作游戏精讲_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

怪物点击动作玩耍11.1玩法介绍在怪物群中穿梭斩杀武士能够自动行走.点击按键攻击怪物!点击鼠标按键后发起攻击,打倒怪物在指定时间内尽可能多地击倒怪物。21.1玩法介绍一次性斩杀多个怪物,对于密集分布的多个怪物,可以通过一次攻击就将其全部斩杀。被砍中的怪物向四周八方飞散飞。近处斩杀怪物将得到高分!斩杀怪物时离得越近,得分越高。假设不消逝失误,怪物的数量将会增加!得分也会增加。连续斩杀怪物后,消逝的怪物数量会渐渐增加。尽可能零失误地持续斩杀怪物,是获得高分的秘诀。31.1玩法介绍遇到怪物后将失败!一旦武士和怪物发生接触,玩耍就会完毕。41.2简洁的操作和爽快感 不一论创作何种玩耍,都会有一些刚开头时就必需考虑的一些事情,那就是玩耍的内容.

我们在玩玩耍的时候,在编写代码的时候,在漫无目的地扫瞄网负的时候,可能在很偶然的瞬间,脑子里突然消逝出了关于玩耍的灵感。构思玩耍题材的这个过程,其实是很有乐趣的。的仆人公武士。问了之后才知道,除了角色外,还有把怪物逐个砍到的动画。就在那个瞬间,笔者萌发了“用这个角色来制作玩耍”的想法就这样,在和设计师深人沟通后,制作这个玩耍的念头就产生了。

准备玩耍的内容时有一些要留意的事项。首先就是操作简洁。为了便于操作,我们只使用鼠标的一个按键,没有移动和跳动操作,略显单调,不过假设能营造出点击按健时的韵律感,确定是一款好玩的玩耍。

还有一个要点是斩杀时的爽快感。画面上的大量怪物要夸大的向四处飞散。

玩耍的场景大体如下页的插图所示.

这次我们从角色的形象动身构思了玩耍的内容灵感这尔西说不定什么时候就会冒出来.一旦感觉到“这似乎可以作成玩耍呢!”就要把它记录下来,或许什么时候就能派上用场了(确实是这样的)。52.1脚本一览672.2本章小节无限滚动的背景无限滚动的背景的改进治理怪物消逝的模式武士和怪物的碰撞检测得分凹凸的判定使怪物被砍中后四处飞散83无限滚动的背景3.1关联文件FloorControl.cs93.2概要 在怪物这个玩耍中,代表玩家的武士始终向右方前进,在玩耍完毕之前势必将移动特殊远的距离。假设将所需要的背景全部做到一个模型中,那么数据量将特殊大。而且还必需在玩耍开头的时候就生成这些背景,特殊麻烦。

在“怪物”这个玩耍中,背景仅仅用于显示,和玩耍的内容没有关系。即使重复消逝同样的背景也不会影响玩耍的内容。显示在画面中的也只局限于武士四周的一小局部而已。

既然这样,我们就可以反复利用几个一样的组件来合成背景,并且只在玩家的周边将各个组件逐个显示出来。103.3背景组件的显示位置 我们预备了三种类型的背景组件。分别是背景A、背景B和背景C。

背景组件 通过循环并列显示A,B,C三种背景组件,就能够呈现出没有缝隙的背景。而实质上各个组件只有一个显示在了画面中。 刚开头时,A,B,C各个组件都显示在武士的四周。当玩耍开头武士移动了确定距离后,各个组件将移动到下一个适宜的位置。由于总共有二种组件,所以组件的移动宽度=3x一个组件的宽度。这个值在源代码中存放于变量total_width中。1112 请在Unity中启动玩耍,按下暂停按键切换到场景(Scene)视图。可以看到背景只显示在了武士的四周。133.3背景组件的显示位置 把这个流程用代码描述出来,就是下面这样〔从FloorControl类中摘出的一局部〕。143.3背景组件的显示位置推断组建是否该移动的规律位于代码的(a)行。floor_position表示背景组件的位置,camera_positio。表示摄像机的位置。虽然程序中使用了摄像机的位置来准备背景的移动,但为了便于理解,这里我们使用武士的位

置来说明。由于武士位于画面中

央偏左的位置,严格来说摄像机

和武士的X坐标值并不一样。但

是为了便于理解背景移动的算

法,不妨认为这个等式成立:

摄像机的X坐标=武士的X坐标。组件位于floor-position.x时

,该组件再次消逝时的坐标

“floor_position.x+total_width”

假设摄像机的X坐标大于中间点

floor_Position.x+total_width/2.0f,那么距离下次消逝的位置比距离现在的位置更近,组件将移动到下

一地点。153.3背景组件的显示位置3.4小结 这次我们介绍了无限循环的背景的根本制作方法。有些需要碰撞检测的玩耍中会创立一个所谓的“地形”模型,但即便是在那种状况下,不影响玩耍性的远景也常常通过这种循环显示背景组件的方法来表现。164无限滚动的背景的改进4.1关联文件FloorControl.cs174.2概要 上节介绍的算法中,背景只在每次调用Update时移动一次。这样一来,假设武士

移动的距离很长,就有

可能消逝背景和角色的

移动不和谐的状况。

虽然我们这个玩耍中并

不会到达那样快的移动

速度,但是有些玩耍中

消逝过玩家角色移动,

或者在场景中移动到错

误位置的现象。下面就

让我们来考虑一下这种

状况的解决方法。184.3稍作尝试 让我们来实际体验一下上节所述的问题。作为调试,这里保存了武士能够一瞬间移动很远的距离这一功能。启动玩耍后请按下W键。如图,可

以看到在武士四周的

背景不复存在了。 在Unity中执行时

,将其切换到场景视

图后使用逐帧模式观

察,可以看到背景组

件在缓缓移动。 在这种状况下,

为了能够正确显示背

景,该如何处理呢?194.4背景组件显示位置的改进 在前一小节中,我们提到了一样类型的背景组件会依据total_wzdth=一个组件的宽带x组件数量(3个)的间隔重复消逝。也就是说,程序将从以下值中,

选取一个最靠近武士坐标的值作为背景组件消逝的位置。因此,只要求出上面算式(1)中。的值,就可以确定背景应当消逝的位置。接下来,让我们看看改进后的FIoorControl.Update方法。20214.4背景组件显示位置的改进

在图中,dist是武士的移动距离。将dist除以背景组件的整体宽度total_width后的结果赋值给n。224.4背景组件显示位置的改进 n是整数,但是经除法求出的结果并不愿定是整数。因此把结果代入n之前,需要先做四舍五入处理。假设只是简洁地进展类型转换(cast),将直接舍去小数局部,请读者留意这一点。 之所以使用四舍五人而不是直接舍去小数局部,是为了在舍去和进位两种状况中选取最靠近武士坐标的状况。这种思路和上节提到的“越过中间点”的推断是一样的。234.4背景组件显示位置的改进 可以使用Mathf.RoundTolnt方法来实现四舍五入。Mathf是Unity中的一个功能类。它含有很多根本的数学训‘算功能。 还有一种实现四舍五人的方法:让数字加上0.5后再舍去小数局部:可以利用Mathf.FIoorTolnt方法舍去小数局部。 使用RoundToInt和FloorToInt方法时,需要留意输入值为负数的状况:RoundToInt直接对确定值进展操作,而FloorTolnt则会连同符号推断数值大小。 右表举例列出了分别用这两种方法对正

负数进展操作的结果。 在这个玩耍中,武士的坐标只取正数。山于即使武士会往相反的方向移动也要判定“更近的一端”,因此程序中使用了RoundToInt方法。但是在某此玩耍中,则可能需要找出“更靠近左边的一端”,这种状况下就应当使用FloorToInt方法总之,我们应当依据不同的状况灵敏选择最好的方法。244.4背景组件显示位置的改进 到此为止,我们对循环显示背景组件的方法做了改进。不过大局部状况下,使用前一小节所介绍的方法就足够了,一般没有必要考虑怪物和武士的移动。开发过程中花太多精力在无关紧要的事情上简洁造本钱末倒置,不过在时间允许的状况下适当做一些有益的尝试,一或许会对后续的开发很有帮助。请读者在明确“完成玩耍”这一目标的同时,享受这种探究的乐趣。254.5小结5怪物消逝模式的治理5.1关联文件LevelControl.csOniGroupControl.cs265.2概要 玩耍启动后不久,画面右方将消逝怪物。玩耍的目标是不停地砍倒怪物并持续前进。27 根本上,怪物只有跑向武士这一个动作。武士和怪物都沿直线跑动,玩家的操作仅仅是在适宜的时机按下按键。特殊简洁。但是简洁的操作绝不意味着玩耍是无趣的。 在面对智能手机的玩耍中,很多都仅仅支持点击屏幕操作。但其中大受玩家欢送、百玩不腻的玩耍也不占少数。 和这些玩耍类似,我们这个玩耍的精华在于把握好点击按键的节奏:通过调整怪物消逝的频率和速度,可以实现多种不同的情境。 下面让我们花些时间来设计怪物消逝的方式,让玩耍变得更好玩。285.2概要5.3怪物消逝的时间点 下面我们来看看该如何准备怪物消逝的间隔。假设怪物相继消逝的间隔很短,玩家就必需很快地点击按键,这样玩耍就比较难。相反,假设怪物消逝的间隔比较长,或者移动的速度比较慢,那么玩耍就会比较简洁。

首先考虑到怪物的运动速度和消逝间隔=难易度,我们在每次成功攻击怪物后就增加玩耍的难度。固然这里需要设置一个上限,并使消逝失误后玩耍会回到最初的状态。

每当武士前进了确定距离,怪物就将在其前方消逝(图1.11)。怪物消逝的位置位于武士前,正好在画面之外立刻进人画面的位置。假设这个距离过短画面上将会突然消逝一个怪物。反之假设过长,则会导致在画面的渲染区域之外存在很多怪物,增加不必要的处理开销。

在设计怪物消逝模式的时候,需算出武士从当前位置动身应当前进多远才让下一个怪物消逝。假设玩家能很顺当地斩杀怪物,就让这个距离越来越短,而假设玩家消逝失误,则恢复到最初的长度。

实际试玩这个玩耍后,就可以体会到随着怪物消逝的间隔变短,玩耍的难度也在渐渐增加。

不恰当的速度或间隔的上限值可能将汗致无法完全除怪物,因此玩耍开发者们要通过反趁试玩来调整得出适宜的值。29305.3怪物消逝的时间点315.3怪物消逝的时间点5.4怪物消逝模式的变化 虽然速度加快会导致玩耍变难,不过反复试玩几次后玩家就会惊异地觉察自己完全能够适应了。即使是一开头觉得比较难的速度,经过jL次挑战后似乎也变得没有什么了·这主要是由于目前怪物消逝的间隔是固定值的缘由。 请读者想象一下和着音乐打拍子的情景。大家应当都有过这样的体会,即“即使节拍很快也跟上了”。其实两者的原理是全都的。由于不管速度多快,但节奏是一样的,所以玩家只需要依据同样的时间间隔点击按键就可以打倒怪物。 为了使玩家能够体会到点击按键的爽快感,要求玩耍具备确定的节奏。不过假设始终使用同样的节奏,玩家很简洁就可以消退怪物,这样玩耍就显得有些无趣了。 也就是说,问题不在于速度,而在于节拍是固定的。那么我们试着每隔一段时间,就使用特殊的消逝模式。这里我们制作了以下几种和一般模式不一样的特殊模式。32连续:怪物以短于正常时的时间间隔涌上来。缓慢:怪物移动的速度比一般模式的最低速度还慢,并且消逝的间隔很长。玩家在持续玩难度较大的关卡时会感觉疲乏,因此可以插入这个模式供玩家休息调整。赶超:后消逝的怪物追赶并超越更早消逝的怪物。后登场的怪物将会更早到达武士的位置,这样会使玩家难于准备出手的时机,让其措手不及。可以说是这个玩耍中比较难的一种模式。加速→减速:登场的怪物到达画面中心四周位置后加速,快要接近武士时减速,然后再朝武士前进。玩耍的情景就似乎伴随着“危急!快跑!”“不!这样不行!”这样的台词。相比用于把握玩耍的难易度,这种模式更适合用于营造玩耍的演示效果。345.4怪物消逝模式的变化 我们把这4种特殊模式和一般模式混在一起来把握怪物的消逝。每经过假设干次一般模式后就随机选择一种特殊模式。一般模式的持续次数也通过随机准备。355.4怪物消逝模式的变化 开头特殊模式时,以及从特殊模式恢复到一般模式时,必需确保画面中的怪物已经完全消逝。这样可以防止特殊模式和一般模式中的怪物同时消逝。 比方我们看看在“加速→减速”模式中消逝一般怪物的状况。当怪物在画面右边加速前进时假设消逝了别的怪物,有时就会造成两个怪物以特殊短的时间间隔到达武士的位置。 为了避开这种状况,需要在使用特殊模式前后等待一段时间,直到画面上的怪物“编队”完全消逝。 那么,下面我们就来看看上述流程的实际代码吧。365.4怪物消逝模式的变化375.4怪物消逝模式的变化3839(a)首先检查是否已经预备好了生成下一批怪物。就像前面所说明的那样,这是为了防止在特殊模式中消逝其他怪物。

(b)假设还没做好生成怪物的预备,需要检查现在和下一批怪物的消逝模式是特殊模式还是一般模式。当满足以下两种条件时,可以生成下一批怪物。

(b1)当前为特殊模式并且画面中已经没有怪物了

(b2)当前为一般模式

(C)以现在的武士所在位置为基准,计算出怪物的生成位置。怪物从登场开头到消逝为止,武士前进的距离随各模式不同而不同。因此,需要在预备好生成怪物的时候,就定好怪物将要产生的位置。计算出怪物的生成位置后,产生怪物的预备工作就完成了。这之后直到新的怪物被创立出来,(b)和(c)的处理都将被跳过。

(d)武士的位置超过oni_generate_line后生成新的怪物。

(e)最终,提前选择下一次将生成的怪物的类型。相对于在怪物生成后立刻选择下一批怪物的类型,程序在怪物从画面上消逝时就要计算下一批怪物产生的位置。处理流程可能略微有些简洁,请读者参考下面的程序流程图理解一下。405.4怪物消逝模式的变化415.4怪物消逝模式的化变5.5小结 除了这里举例的4种模式之外,应当还有很多种算法。读者可以在理解了程序的构造原理后,试着自己制造一些好玩的模式。426武士和怪物的碰撞检测6.1关联文件OniGroupControl.cs436.2概要 按下鼠标按键后武士将挥刀迎击,假设能成功砍到,怪物将向四处飞去。不过假设没有砍倒怪物却接触到了它,玩耍则将完毕。为了实现这种功能,需要检验武士对象和怪物对象之间的冲突,也就是所谓的碰撞(collision)检测处理。 在很多玩耍中,碰撞检测是特殊重要的一环,不过在程序处理方面往往是比较麻烦的但是在Unity中,只需设定好外形就可以进展碰撞检测的计算。特殊便利! 不过这并不意味着我们可以什么都不用考虑。使用何种外形来进展碰撞检测,将极大地影响玩耍的效果。在这一点上,即使承受了Unity,也照旧需要依靠开发人员的阅历和直觉。446.3分别对各个怪物进展碰撞检测的问题 首先我们尝试对武士承受立方体,对怪物承受球体来执行碰撞检测。角色之间的碰撞检测,常常使用这种粗略的几何外形来进展。这样做的好处是相较于严格的几何外形,计算量会少很多。而且对于大局部玩耍而言,这种做法都能得到比较逼真的结果。45 一般来说,球体的计算量更小。由于玩耍中会消逝大量的怪物,所以我们选择了计算量尽可能小的球体作为检测外形。 设定好外形之后,就可以用Unity来执行碰撞检测的计算。然后再实现碰撞后武士的行为似乎就大功告成了。不过事实上等玩耍运行起来以后,会觉察还存在很多问题。 第一个问题是,武士会绕开怪物前进的问题。466.3分别对各个怪物进展碰撞检测的问题 这是由于怪物的碰撞检测外形比武士的小很多。在Unity的碰撞处理中,为了使对象在发生碰撞后仍可以依据原来的前进方向运动,对碰撞对象加人了滑动之类的处理。请回忆一下动作玩耍中角色遇到墙壁时的反响。依据斜线方向始终按住方向键,大局部玩耍中角色都将和墙壁发生摩擦连续移动。

让碰撞后的对象进展滑动,多数状况下都会使玩耍玩起来更简洁自然,不过在我们的这个玩耍却带来了危害。

另外还有一个问题是,攻击的难度将加大。476.3分别对各个怪物进展碰撞检测的问题 点击鼠标按键后武士开头挥舞砍刀。攻击检测将伴随着这个攻击动作进展。和怪物的碰撞检测相像,我们也使用球体来进展检测。 虽然用于攻击检测的球体尺寸够大,不过从武士的中心位置往内或者往外偏移的地方有可能仍位于攻击范围之外。这样就会消逝看起来似乎攻击成功了其实却并未命中的状况。即使只剩下了一个怪物也有可能导致玩耍以失败告终。像这样,假设略微错过了时机就会造成失误的话,玩耍就变得太难了。 针对这个问题,试着转变碰撞检测的外形及其尺寸也是一种解决方法。不过怪物自身的尺寸原来就很小,假设加大的话又将消逝另外一个极端,即“看起来没有击中,结果却击中了”的状况可能会增多。 让我们试试其他的解决方法。486.3分别对各个怪物进展碰撞检测的问题6.4把怪物编成小组 玩耍中的怪物总是扎堆消逝。同一批次的怪物彼此之间比较密集,另

外武士总是沿着

直线前进。因此

即使把同一批怪

物编为一个小组

来处理似乎也没

有问题。

于是我们用

OniGroup对象把

怪物集合起来,

将怪物作为它的

子元素来处理。

碰撞检测也改为

对OniGroup对象

整体进展。49 怪物小组的碰撞检测使用立方体,尺寸和武士的碰撞检测所用的立方体大抵一样。这样设置以后,武士就不能再越过怪物或者从一侧

绕过怪物了。

另外,假

设OniGroup检测

到来自武士的攻

击后,作为子元

素的全部怪物都

将受到攻击。这

样一来,前面提

到的由于怪物的

位置稍有差异就

导致攻击不成功

的状况就不会再

有了。并且玩耍

也增加了多个怪物被同时砍飞的爽快感。506.4把怪物编成小组 Unity中允许直接使用模型的外形来进展碰撞检测·不过很多玩耍中都承受粗略的外形,而且也能到达像我们这次的玩耍一样良好的效果。特殊是那些尺寸比其他角色小很多的对象以及大量对象一起移动的状况下,把它们集中归为一个小组做碰撞检测是很好的方法。516.5小结7得分凹凸的判定7.1概要 大局部玩耍都鼓舞玩家不断挑战更高的得分。虽然也有像角色扮演(RPG)这类更留意情节而不关注得分的玩耍,不过支持玩家通过互联网与其他玩家同台竞技,进而挑战更高得分的玩耍正变得越来越多。

这次我们开发的是一个斩杀怪物的玩耍。成功斩杀怪物后,怪物消逝的数量会越来越多。玩家要尽可能地持续斩杀怪物,这样才能在玩耍完毕之前杀掉大量的怪物。反之,玩家一旦失手,怪物消逝的数量就会削减。

固然,我们可以直接把倒下的怪物数量作为玩家的得分,但这里我们不妨多琢磨一下,看看怎样才能让玩耍更好玩。

例如,假设武士在追赶怪物的过程中始终不攻击怪物,最终将撞上怪物。在接近怪物的过程中,假设太近的话就会失手。玩家要在确保不撞上怪物的前提下尽可能地接近怪物并斩杀,这样玩耍的技术难度就增加了。

这次我们设定了一个“靠近斩杀怪物将得到高分”的规章,但假设靠得太近又会导致武士撞上怪物而失手,这样玩耍就变得更加刺激了。

假设觉得玩耍缺点什么,或许可以尝试着往玩耍中加人这种“高风险&高回报”的玩法。527.2武士的攻击判定 在争论如何推断攻击距离的远近之前,我们先说明一下攻击判定的原理。

玩家点击鼠标按键后,武士就会发起攻击行为。而攻击判定的计算就将伴随着攻击行为的整个过程。

在搏斗类玩耍中,往往需要对玩家角色的拳脚和所使用的武器执行攻击判定同样,也需要对被攻击者的每个关节部位进展损害计算。正由于有了这样精细的碰撞检测,才能够实现诸如“蹲下躲开对方的盘旋踢”“脚部受到攻击而.导致行走速度减缓”等玩耍特性。

不过我们这个玩耍的碰撞检测并不需要细致到这种程度。由于怪物以很快的速度朝武士靠近,

假设要严格依据刀的外形来进展碰撞

检测,击中的难度将大大增加。所以

这里我们用一个大的球形来进展碰撞

检测,并在播放攻击动作的时候将其

放置在武士前面。53 攻击的碰撞检测的执行时间,会比攻击动作的播放时间略微长一些。假设提前按下鼠标按键,怪物就将进入上面所说的碰撞检测的球体中,这就意味着攻击成功。搏斗玩耍中常常有“预推断”的说法。像这种敌人朝着玩家快速扑来的玩耍,加人这种机制后会让玩耍变得更简洁上手。547.2武士的攻击判定7.3推断在多近的距离斩杀 通过提前进展碰撞检测和延长检测的时间,就可以应对怪物快速运动的状况。那么,现在让我们回到主题,看看如何才能计算出.

“武士在多近的距离斩杀了怪物”。“要计算武士在多近的距离斩杀了怪物,看看怪物和武士之间的距离不就行了吗?”55我们用脚本PlayerControl.cs来治理攻击判定开头后的时间。

其中,attack_timer是用来记录攻击判定持续时间的计时器。在按键被按下的瞬间会用一个特定的值对它进展初始化,随着时间的削减,当它的值变为0时,则意味着攻击判定执行完毕。567.3推断在多近的距离斩杀 attack_timer表示的只是攻击判定的“剩余时间”,为了获得被用于判段“在多近的距离斩杀”的“经过时间”,我们还需要预备一个叫作GetAttackTimer的方法。

SceneControl.cs的AddDefeatNum方法在武士攻击命中怪物时被执行。

577.3推断在多近的距离斩杀 最终,设定用于度量经过时间和得分凹凸关系的ATTACK_TIME_GREAT和ATTACK_TIME_GOOD的值。假设经过时间小于ATTACK_TIME_GREAT并在足够近的距离内斩杀了怪物则判定为GREAT,假设时间比ATTACKJIME_GOOD短则判定为GOOD,除此之外在远距离斩杀怪物的状况则判定为。KAY。每次攻击后都记录下判定的结果,在玩耍完毕后再通过这些结果来准备玩家的总体成绩。58 通过转变用于衡量得分凹凸的经过时间的阂值(ATTACK_TIME_GREAT和ATTACK_TIME_GOOD),可以调整玩耍中获得高分的难度。比起制作程序本身,有时候调整这些数值反而更花时间。但由于这些数值是准备玩耍平衡性的重要因素,因此建议读者通过比照效果调整出最适宜的数值。597.4小结8使被砍中的怪物向四处飞散8.1概要

被武士砍中后,怪物将向四周八方飞散。

动作的不同将导致攻击力度的强弱表现不同,被攻击的各个对象的反响也有很大差异。在搏斗玩耍中,对对手一顿拳打脚踢之后,看到其步履蹄姗的样子,往往可以感受到他的苦痛。相反假设对手显得镇静不迫,即使动作再华美也只能给人一种攻击力很弱的印象。 有时候我们常常听到“攻击反响”的说

法。在玩玩耍时大家应当都有过感觉按键和摇

杆似乎变重了的经受吧?可以说这种玩耍通过视

觉和听觉把攻击反响特殊完善地呈现了出来。

我们将通过怪物的四处飞散来表现武士的

攻击强度。另外,我们也将实现上节提到的靠

近斩杀怪物会猎取高分的规章,并使“在多近

的跟离斩杀了怪物”影响怪物的飞散方式。

不过每次都承受同样的方式飞散开未免有

些单调,因此我们会调整飞散的方向使每次的

效果都略有不同。608.2想象一下“圆锥体”在考虑实现方法之前,我们首先整理一下“需要做什么”。用专业术语来说这叫作需求分析。要让怪物华美地四处飞散让每次的动作都各不一样 “华美”这种描述对于编程来说是一个比较暖昧的说法。应当描述得更为具体一些。

前面我们已经提到过把假设干个怪物编成一个刁、组,并通过这个小组来执行被攻击判定。受到攻击时小组内的全部怪物都将四处飞散。而假设怪物们都向着同样的方向飞去,将毫无“华美”可言。换句话说,所谓的“华美”,应当是这些怪物尽量朝着不同的方向飞散开来。

这个被刀砍中然后各自飞散开的过程,更类似于炸弹爆炸的画面。由于怪物被刀砍中时受到了某一方向的作用力,因此往相反的一侧飞出才显得自然。武士具有右斩、左斩的动作。每个动作都将令怪物向反方向飞出。

“靠近斩杀时怪物将更华美地飞散开’,这个要素也是必要的。虽然单纯转变速度也能到达类似的效果,但为了让玩家更简洁地了解是否完善地砍中了怪物,我们将飞散的方向改为前前方向。假设从前面飞来的怪物都依据一样的方向弹开,就能让玩家猛烈地感受到攻击的力度那么我们再次细化需要完成的工作。61怪物朝不同方向飞出依据动作的不同往左或往右飞出依据斩杀时距离的远近调整为前前方向每次飞出的方式都有变化 要是每次一飞出的方式都不一样,很多读者可能会想到使用随机数。不过假设仅对飞出的方向和速度进展随机化处理,虽然可以转变飞出的方向,但是不能够保证怪物会按我们期盼的方向飞出。

像这样“想在随机化的同时进展某种程度的倾向把握”的时候,解决问题的关键就是先确定好关键性的原则,再使用随机数转变细节参数。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论