————————————————————
希望你在看此章节之前,看完了前面的四个章节,否则可能会不太懂接下来的教学。
终于到了咱们的坑向教学,各位兴奋吗?从这一章开始,Konux将带领大家逐步进入神奇的触发器世界,当然本章并不涉及触发器,下章才会教学,但本章会为学习触发器打牢基础,所以一定要好好掌握本章的内容,从这一章开始,学习难度可能会直线上升,同时,你的编辑器实力也是如此,是挑战,也是机遇,希望大家hold的住。
以下为本章知识点:
· 坑向制作的思路
· 动画的制作
· 玩家单位相关技能
· 触发区域的使用
· 函数编辑器的使用
· 常量、变量与函数
· 单位的中心点
· 常见函数详解
· 对单位部分属性的使用
· 物理单位的使用
新的开始
啊哈,又是熟悉的界面,又是熟悉的画风!
这里因为Level_2我们当时作为了结束页,显然我们需要在第一关和第二关之间插入一关来制作我们的坑向关卡,所以这里我们将原先的结束页改名为EndLevel,然后添加一个名为Level_2的关卡
可以看到Level_2添加在了下面,这并不符合我们关卡的顺序(第一关->第二关->结束关),所以可以按住Level_2向上拖动到合适的位置
好了,我们双击第二关,开始我们的坑向制作
坑向制作思想
相信有不少新人在首次制作坑向时,都会露出张三般邪恶的笑容,想把玩家往死里整,以发泄自己玩坑向时的愤怒,这种行为超级正常,但是它行不通。我们如果是站在玩家对立面的角度来设计一个地图或者说游戏,那么它一定是失败的!我们制作游戏的初衷是什么?游戏应该是能给人带来快乐的第九艺术,不管是什么形式的快乐,总之绝对不是折磨。跳刺,玩家一直死,他有快乐吗?有,当他过了某个刺型之后,会产生非常大的成就感(虽然这个成就感只适用于有实力的个体),坑向,玩家一直被坑,他快乐吗?非常快乐,因为那些坑非常有意思,那如果这个坑向做的很无聊而且各种恶意(不是恶趣味),还快乐吗?快乐个锤子,玩家可以选择不玩,并给你个踩,这样你满脑子的恶意坑不到任何人,相当于你白做了。
那么什么叫做恶意的坑?比如设置一个砖块、存档等无伤害的东西碰到就死且不给出任何提示效果,速度特别快的刺使玩家反应不过来秒死、坑向结合难度高的跳刺、满屏的碰撞显示砖块等等,最直接的方法是去自制关卡的萌新区找坑向地图,多玩几个(因为有的萌新做的坑向还可以)你就能感受到了。
坑向注重坑,坑一般需要合理的展现,而不是让玩家啥都没干就死了,坑的过程要让玩家能反应过来是怎么被坑的,而不是让玩家去猜。所以做坑向时,应该打开脑洞去想坑型,怎么离谱怎么想,并且要站在玩家的角度去思考坑法,将自己带入进去,想像如果自己是玩家,该怎么走,该怎么想,从而针对玩家做出相应的坑型。
好了废话就说到这里(才不是),我们做坑向的第一步就是做出地形,地形要怎么样有创新呢?拿官方教程里Aikesi做的地形举例子,咱大致勾画一下,就长下面这样
可以看出这个地形非常的单一,路线就是从下往上蛇形上升,非常简单,但是往往简单的地形很难做出有创新的坑(不是不能),所以地形不能太简单,那么该怎么做一个合适的地形呢?超级简单,这里给一个字:瞎糊(嗯?这不两个字吗)!你自己都不知道你在糊什么的时候,它就是创新!
那么首先我们得瞎糊一个玩家路线,路线不要太简单,不要太复杂,不可交叉(新手阶段建议别交叉,高级制作可以),Konux在这里随便画一个,注意路线是横竖组成的直线
路线画好之后,根据路线我们再粗糙的搭建一个大致的地形
看起来这个地形非常的丑,所以我们需要对其进行一点点精修,加上一点点砖和刺进行修饰,那么我们的地形就做好了(这里的砖就是尽量表现的凹凸不平并看上去合理就行)
这样,我们的地形就粗略的勾画完成啦!因为是坑向,所以我们不需要考虑地形可不可以跳的上去,因为我们做坑型的时候,有各种办法能让玩家过的去,这就需要打开自己的脑洞了。那么由于我们的教程是偏向于技术实现方面的讲解,所以关于如何想出好玩的坑法,就不做细讲了,而且可能教程的创意会影响到各位对于坑型的思考,对创新产生约束(Konux你说你是不是又偷懒了? Konux:嘘…小声点,别让他们听到了)
如果需要了解坑型的常规套路,可以进入下方我写的坑向理论的教程链接进行阅读:
https://easydoc.net/s/85829661/USXlrH6u/skih7IXY
函数编辑器
好了,接下来就开始讲解重点技术环节,在坑向中如果想让刺能听我们的命令来做一些事,就需要写动作了,动作是个啥呢?你可以理解为脚本,你写好动作后,游戏就会根据你写的动作里的内容而执行相应的一些事情,而动作里装的就是一堆的函数(脚本里对应为代码)。可能这并不易于理解,我们先上手试试就行。
找到触发区域单位,将它摆出来
看看它的技能里有啥
有[隐藏]和[运行动作]两个技能,很明显,第一个技能就是使这个区域隐藏的(看不见但摸得着),而[运行动作]技能就可以用来写动作,我们点开[运行动作]技能看看
有个属性就是动作,其实[运行动作]技能对单位所起的功能就是:当目标单位碰撞到带有[运行动作]技能的单位时,则执行此技能里的动作,最大运行次数属性就表示这个技能可以触发几次,比如填2,那么首次触发技能后执行完动作,第二次再触发,就还会执行一遍动作,第三次就不会了,这里如果填-1,则表示次数为无限次(编辑器里的很多地方,-1次都可以表示无限次)。
接下来我们双击动作属性,写一下动作(也叫函数组,因为动作里装的就是一堆函数),点击左上的新建函数,就可以看到以下的东西
右边的那一些是对于函数的工具栏,我们从上往下依次标号为1到7
1:新建函数(快捷键:C)
2:编辑函数(快捷键:E)
3:复制函数(快捷键:Ctrl+C)
4:剪切函数(快捷键:Ctrl+X)
5:粘贴函数(快捷键:Ctrl+V)
6:设置函数的激活状态(函数是灰色的就表示未激活,此状态下,函数不执行)( 快捷键:A)
7:删除函数(快捷键:Delete)
咱上面讲了一堆的函数,那么说到底,啥是函数?是数学里的函数y = f(x)吗? 是,也不是!程序里的函数和数学上的函数不同,但从广义上来说又有共通之处,函数一旦它们的参数(比如x值)确定,那么函数就能输出一个确定的值,在我们的编辑器中也是类似,只要函数的参数确定,那么函数就能根据你的参数而去做一些特定的功能,比如让刺往上飞。
好了,我们先着手做出一个函数看看,比如让刺移动,点击新建函数,快捷键为C
这就是函数编辑器了,当然了这是新版函数编辑器,操作难度会比旧版函数编辑器高,所以这里就主要使用新版编辑器进行讲解,新版会了,旧版也能会。先介绍一下,可以看到有左中右三栏(上面的不用管),左边是函数分类栏,就像单位的放置分类,或者是商品架上对商品的分类,这是给函数分类的,便于我们快速寻找到自己想要的函数
至于中间一栏就是函数栏了,里面放置着分类栏对应的当前分类里的所有函数,就像超市里的饮品区放置着的所有饮料一样。而右边这个占函数编辑器一半区域的东东,就是函数编辑区,你选择的函数将在这里完成参数的编辑。
好了,由于我们要对刺做操作,刺是单位,所以就应该选择的是单位分类里的相关函数,我们要让刺干啥?飞?不不,这叫移动,所以可以找到如下的一个函数
移动(指定时间、位置)函数,即字面意思,让某单位以..时间移动到..地方,在函数编辑区里选择第一个参数(使…),然后点击常量(函数和变量后文再提),我们就可以选择单位了
这里需要切换放置层级为单位,然后才可以选择刺
选好后,我们对下一个参数进行设置,也就是移动需要的时间,同样点击常量,写好时间,比如这里写0.5秒
最后我们设置最后一个参数,同样的选择常量,然后在场景中选择自己想要的坐标,因为我们想让刺往上飞,所以填如下所示的位置就好
好,我们的函数就制作完成了,点击保存
用旧版函数编辑器也是差不多的操作,按如下步骤就行
确定之后,上面的这一行就是我们写的一个函数(如下图,这里函数前面的[单位]表示函数的分类类型,每个函数都有它的类型),点击确定和保存之后我们拿黑旗测试一下,这里为了演示方便,所以将触发区域的隐藏技能删除,让它能看得到
那么或许有人有这样一个要求,想做一个连环坑,比如让刺连续移动,就像下图这样
那这太简单了,我们可以复制我们写好的这个函数,右键或长按复制
然后粘贴下来,并将下面这个函数的坐标改成我们第二段位移的终止坐标就好了
这不就是两段位移吗?简简单单!我们直接测试看看
屑!咋会这样,这刺直接斜着跑了,而且只走了一段!
要解决这个问题,首先我们需要理解动作(函数组)的运行机制
动作里的函数是从上往下依次运行的,而且如果不加有等待性质的函数,函数组的运行时间是在1帧以内(你可以理解为一瞬间)。那么我们来看上面这个函数组,尝试理解它的意思,首先,你告诉刺要往上移动到(3.2,2.56)坐标,它还没有动呢,接着你又给它说让它移动到(4.48, 2.56)的位置,这是一瞬间完成的,你趁刺不注意,给它发了两条相同性质(都是移动)的命令,但是刺只能朝着一个确定的方向移动,由于函数组从上往下依次运行,于是它只执行了你给它发送的最后一条命令,于是刺就斜着走了。那么怎么解决这个问题呢?我们只需要在两个函数之间加上一个[系统]等待函数即可,就是下面这个函数
同样的我们修改好等待的时间,这里填上0.5秒就可以了,然后保存
等待函数具有延迟运行其下面的函数的作用,就是函数运行到等待这之后,等待函数就将如同Konux一样庞大的身躯把路给堵住了,必须得等上指定的时间,才能继续执行后面的函数。所以上面的函数组的意思就是命令刺在0.5秒内移动到上面,同时等待0.5秒,0.5秒之后,上一个函数正好运行完毕(此时刺运动结束),那么再执行向右方的那个坐标移动的函数就没有问题了,等待函数在坑向中会非常频繁的使用,一般的连环坑都是采用等待的方法来做连续的一些动作。
可能细心的读者会注意到有这样一个函数,指定速度的移动
我们上面讲的是基于时间的移动,这个是基于速度的,为啥坑向我们不用这个?
这里先科普一下速度的概念,我们小学一年级在数学课的讲台上,体育老师就曾经教过我们v = s/t,也就是速度等于位移除以时间,在游戏里也一样,比如速度为2,我们就能算出这大概就是每1秒钟走s = vt(速度乘以时间) = 1*2的距离,大概是2/0.64 = 3.125个格子(网格)。
现在我们来解释为什么坑向一般用指定时间的一些函数,而很少选择指定速度的函数,这两个函数其实都可以达到同一效果,但是如果我们要加等待呢?等待多少秒合适?如果是以时间为基准的函数,那么我们不用算就能得到准确的等待时间,如果用速度呢?这个时间需要计算s/v才能得到一个准确的结果,这个s就是起点到终点的距离,要是做坑向每做一个函数就得做一个计算题,那就相当不方便,所以一般来说,我们更习惯使用指定时间的函数。
好了,以上就是函数编辑器最基本的用法,接下来将以问答的方式来边问边学
问中求进
Q:咱看到函数里有些带偏移的函数,偏移是啥意思?
A:改变分为绝对改变和相对改变,大部分函数的参数是绝对改变,即有一个确定的参考值,而偏移就指的是以自身的参数为标准的相对改变。打个比方,张三上次考试考了100分,这次考试考了90分,那么这次考试的绝对分数就是90分,而他的分数偏移就是-10分。偏移就是以原本的参数做为基准。比如坐标偏移(如下)
如果是偏移(-0.64,-0.64),那么这个坐标的绝对位置就是白刺目前的位置的往左下方向一格的坐标位置,由下图中就可计算得到绝对坐标为(6.4-0.64, 3.84-0.64) = (5.76, 3.2)
Q:能让玩家不能控制吗,又如何解除控制?
A:一般需要让玩家不能操作的,就要使用[暂停]函数,就是下面这个,暂停函数能够暂停单位上大部分技能的运行。
什么?找不到这个函数?不慌,咱们只需要在动作编辑器的搜索框里写下函数的名字(这里就是暂停,注意不用写函数分类)就能找到了,以后如果不知道函数在哪,可以直接搜索!
那么找到了这个函数之后,它给了个1个参数让我们选暂停的目标,我们这里要暂停玩家的操作,所以就需要暂停主机玩家单位,主机玩家单位就是玩家控制着的单位(比如散人、kid),但是我们不能选择常量,因为你会发现根本没有,在场景里没有放置人物单位,那么这该怎么选呢?我们就得需要点函数了
在函数里,可以找到单位分类里的主机玩家单位
然后点击保存即可
这样我们就能做出使玩家不能控制的效果
但我们要研究问题的本质,为什么暂停主机玩家单位就能让玩家控制不了角色呢?暂停函数的功能是?暂停单位的技能,那么想必事情都归结在了主机玩家单位的技能上,我们打开数据编辑器,看看主机玩家单位
玩家控制的单位(也就是玩家角色)默认为散人,如果你需要使用别的角色,比如Kid(可以发射子弹),就需要在游戏属性里进行设置
咳咳!扯远了,我们看看散人单位的技能:玩家控制、物品控制、玩家重生、玩家交互
单位 == 属性 + 技能(再次提醒)
玩家能够控制角色,就是因为玩家单位有[玩家控制]技能
玩家能使用物品(比如枪),就是因为玩家单位有[物品控制]技能
玩家能重生,就是因为玩家单位有[玩家重生]技能
玩家能存档,能用传送门传送,就是因为玩家单位有[玩家交互]技能
只要把其中的一个技能给删了,那么玩家就会失去这个技能所对应的功能,但是强烈建议新手不要这么干(特别是[玩家重生]技能),这种操作需要有一定的经验了才能驾驭,否则相当容易出bug。
在这些技能里有些属性,各位可以根据需要进行设置,比如[玩家控制]技能,如果需要玩家空中只能有一段跳,就可以设置空中最大跳跃次数为1(默认值为-1,表示无限次,但因为最大跳跃次数为2,所以空中最大跳跃次数相当于2)
同时还有对玩家的重力比例的设置,如果想让玩家反重力,就直接设置这个为-1即可,双倍重力就填2
还有移动速度,如果想让玩家按左键,角色朝右走,按右键,角色朝左走,就可以直接设置移动速度为-3,表示玩家的速度反向
再看看[物品控制]技能,若想让玩家一开局就有某种物品,可以设置初始物品,如下图中的设置摄像头模式物品,在跳刺地图中非常常用
好了,大概这些就是玩家单位的技能,所以你也应该明白为啥暂停主机玩家单位能够让玩家不能控制,因为这个函数把玩家身上的这四个技能全部禁用了,导致玩家不能移动、跳跃、复活、交互和使用物品!
那么要恢复玩家就很简单了,和暂停玩家一样的操作,只需要使用[单位]-恢复函数即可
Q:还有哪些移动单位的函数,它们有什么区别?
A:大概下面这些函数
移动(立即)函数就是让单位瞬间到达某个位置,相当于闪现,关于偏移的概念上面介绍过了,所以这里不再介绍
持续移动(指定速度、角度)函数就是字面意思,使单位从自身的位置开始,朝某个角度进行持续的移动,当然这个函数内也可以设置移动的距离,而角度的概念我们在第一章就解释过,上左下右依次为0°、90°、180°和270°
Q:如何让单位放大或缩小
A:单位大小的变化我们通过缩放操作来实现,可以使用如下函数
缩放(指定时间、固定大小)函数经常用到,我们看看函数的参数
有三个参数,关于前两行参数的用法,和移动函数一样,这里就不细讲了,看看第三个参数,缩放到多少大小,这里的大小指的是你想要让单位最终缩放到多大,我们都知道默认网格的大小是0.64的边长,一般的普通单位也是占据一格的大小,所以这些单位的大小就是(0.64,0.64),比如我们要缩放成2*3大小,如下图,那么我们就需要缩放到(2*0.64,3*0.64)=(1.28,1.92)大小。但是要注意,这个是相对于单位的向量,所以假如单位是横向的,你需要以单位的方向来确定大小,而不是以世界坐标来确定,比如如下两图中的刺,它们的缩放都是2*3的大小(不是左边2*3,右边3*2)。
听起来很简单?是吗?
接下来我们来试试,我们想让刺从左图缩放成右图所示的样子
-> 缩放后的大小就是(0.64*1,0.64*4) = (0.64,2.56),超级简单,注意这里是手动填写,不要去场景中选择坐标
好了我们看看效果(右边的砖块是为了方便数格子)
屑,这刺都陷地里去了!大翻车!不过需要注意的是,它确实缩放到了指定的大小,只不过是陷地里去了而已,那么为什么会出现这情况呢?其实单位的缩放是以中心点为定点进行的,而单位默认的中心点就是(0,0),是单位的几何中心,中心点的比例分布如下图所示。
因为默认中心点为(0,0),所以我们会发现单位在缩放的时候,刺的几何中心是不变的
而单位的坐标,其实就是单位的中心点的坐标。这下知道为什么单位的坐标位于单位的中心了吧!所以如果我们改一下中心点,那么单位的坐标就不是在单位的几何中心了。
对于想实现以上的效果,我们有两种方法:
第一种:缩放同步移动(推荐)
既然刺的缩放时中心点不动导致没能实现这个效果,那么我们只要刺在缩放的同时把它的坐标(中心点)同步移动到缩放后的正确位置就可以了!就像下面这样,注意两个函数执行的时间必须相同才能实现同步
其中(3.2,2.24)坐标的位置如下图上面第一个红点所示(这是刺在缩放之后的中心点位置)
这是咱们在娘胎里就学过的加法,计算一下应该非常简单
第二种:改变中心点(不推荐)
既然中心点不变,那么我们直接把刺的中心点设置为最下面,也可以实现朝一个方向放缩,如下图设置刺的属性
这样就可以了,有人要问了,为啥不推荐呢?这玩意这么简单,而且一劳永逸!首先就是这种方法改变了单位的坐标,会导致移动函数非常难以设置,其次,这种方法非常不灵活,一旦我们不朝上,而需要朝下缩放,就需要改中心点为(0,1),这是很不方便的,其只适用于单纯的只做一种缩放运动的单位,比如自制血条(其实就是素材为纯红色的被拉长的砖块),若设置中心点为(-1,0),就能很方便的从右向左缩放血条。
Q:如何让单位旋转?
A:旋转单位也有相关的函数,如下
先来看看旋转(立即、固定角度),其就表示使单位瞬间旋转到某一角度,关于角度的概念在前面介绍过了,比如我们需要将刺旋转到朝左的方向,那么就直接设置旋转到90°即可,
上图中为逆时针方向的表示,顺时针方向的表示就是将0、45、90 … 270、315改成-360、-315、-270 … -90、-45。
相信旋转偏移的概念你们应该能理解,就是逆时针偏移为正数,顺时针偏移为负数,如下
好了,接下来的给定时间进行的旋转我们主要使用旋转偏移,而不选择使用固定角度的旋转,所以一定要掌握好角度偏移的概念以及计算,那么为啥不使用固定角度的旋转呢?因为如下这两个函数有些bug,目前还不太好用。
我们主要使用旋转(指定时间、偏移大小)
旋转偏移在上面已经介绍过了,如果想往逆时针转动就填入正数偏移角度,顺时针当然就需要填入负数偏移角度。
那么咱们做个小小的综合练习,咱们想让一堆的刺做如下的运动
第一步,让这一排的刺如图所示整体旋转,第二步整体向右移动。
有同学就要问了,咱们只教了如何让刺自转,没教如何让刺绕某点旋转呀,你这不是欺负老实人吗???嗯?
诶!真的没教吗?回忆一下,我们上一章教过旋转节点的用法,是用指向使单位绑定节点,而节点又在自转,所以单位可以绕节点旋转,节点能旋转是因为它用了一个自动旋转的技能,这里我们如果换成函数控制的旋转,不也一样可以吗?
好的,我们直接开始操作,先将其它的单位都指向这个位于旋转中心坐标的刺(为了展示指向,所以把刺移了位置)
现在我们只需要旋转最右边的刺,使它进行正确的旋转就行
很显然右侧的刺需要朝顺时针方向旋转90°,所以偏移就是-90,咱们直接这样写
然后接下来我们需要使这些刺移动到右边,这太简单了,我们给四个刺都写一个移动函数就行了,但是注意这是连环的动作,所以需要在旋转结束后才能移动,加上等待0.2秒
我们测试一下
额,这是咋回事?是不是游戏出bug了?旋转没有问题,但移动确出了大问题,除了最底下这个刺是正确执行了我们的函数,上面三个都没有走到正确的位置。不妨你想一想,这个移动函数真的需要这么用吗?如果咱们有100个单位需要移动,你还要一个个的设置吗?那写这玩意也太低效且无聊了!注意指向的特性是子单位可以跟随父单位同步进行移动、旋转、缩放,所以这里只需要移动这群单位的父单位即可,也就是最下方的这个刺,我们把对其他的刺的移动的函数给去掉,可以按住<Ctrl>键对函数进行多选(手机端在动作编辑器的右下角也有),然后统一按<Delete>键删除。
再测试一遍就会发现成功了。那么为什么不能对子单位进行移动、旋转和缩放呢?因为它们是跟随父单位进行这些操作的,如果同时有两个人告诉刺该怎么做,很显然就会出现混乱,那如果我们需要对某个子单位操作怎么办?可以使用单位类函数中的父单位相关函数来解决这个问题。
这两个函数就分别等同于指向和取消指向。
Q:如何让单位显示或消失
A:很简单,有设置显示状态的函数,在单位类函数里
设置为否表示隐藏,是则表示显示,这里的显示状态和单位属性里的显示状态是相同的,这里的隐藏,是指看不见、摸不着(注意[隐藏]技能是看不见、摸得着,别搞混了)。
Q:如何在游戏运行时创建和删除单位
A:创建和删除单位当然是要使用单位类的函数啦,很快啊,咱就找到了如下函数
相当简单明了,先看创建函数,有两个参数,创建一个…在…坐标
注意哦,这里的第一个参数其实并不是单位,而是单位数据,你可以理解成单位数据就像工厂里的图纸,而单位就是用图纸造出的零件,每个单位都是不同的,比如两个刺就是不同的单位,但它们同属一种单位数据。拿人举例子,世界上不会存在相同的人,比如世界上只有一个Konux,那么创造一个人的时候,我们一般都是造人,而不是会说造Konux,因为前者属于人类,而后者属于人类中的个体。
好了,我们点击常量,然后选择想要创造的单位数据(注意到选项卡上面有个大大的“对象”,啊这,此对象非彼对象,这里的对象你就可以理解为是单位数据,而通过单位数据造出单位的过程,专业的说法叫做“实例化对象”,这是编程中的概念,无需了解)。
接着设置想要的坐标,就可以创造出一个单位了。
删除单位也是同理,只不过删除的是单位,而不是单位数据,至于为啥,这里应该就不用解释了。后面还有一个删除(指定时间)其实就是起延时删除的作用,非常简单,请自行尝试就可。需要说明,设置单位删除和设置单位的显示状态为否是不同的,删除是真正的把单位给删掉了,而设置显示状态为否时,单位还在,只是不显示而已。
Q:你讲了这么半天,那么函数编辑器里的常量、变量和函数到底是个啥?
A:这里是个超级重点,需要特别注意。
先解释常量,常量就是一个确定的量,比如放置在场景上的单位,它们都是确定的,你可以去选择的,在数值上,比如1、2、3、1.114514、(0.64,0.64)等等都属于常量,你可以准确的知道这个量的值,它们不会变动。
而变量就是会变动的量,也可以说是不确定的量,比如主机玩家单位,可能是散人单位,可能是Kid单位,也可能是其他的单位,它就是个变量,再比如用函数创建的单位,你从场景中选不到,这也是变量,因为创建的单位可能有各种情况,就像每个人都不同,再比如数学上的函数y=f(x),其中x就是一个自变量,x的值不确定。
函数的概念想必你们已经懂了不少,咱们上面介绍了很多的函数,函数有输入参数(也可以无参数)和输出,函数的参数可以使用常量、变量和函数,函数可以以函数作为参数(实质上是以函数的输出作为参数),一级函数(主函数)的输出是用于实现功能,而作为主函数的参数的函数的输出,实际上就是变量,所以这就是为什么旧版函数编辑器里只有常量和变量。
进一步,我们可以将一个函数的结构图画出来
主函数负责实现功能,而一系列的二级函数负责将输出的变量直接或间接传给主函数
如下面的简单函数
其中[暂停]就是主函数,而[主机玩家单位]函数就是负责获取到主机玩家单位,并把输出(也就是单位)作为[暂停]函数的参数。
Q:咱会用函数创建单位了,但是如何控制这个单位进行移动、缩放和旋转?
A: 用函数创建的单位属于什么?上面讲过了,属于变量,变量有两种获取途径,一是二级函数的输出,另一个就是直接用变量,而变量我们现在没讲怎么使用,所以只有函数一个选择。
可以在左上角看到有个“返回值-单位”即表示当前函数的输出类型,保存
因为刚刚创建了单位之后就执行了下面的移动函数,所以获取到的最后创建的单位就肯定是上面刚刚创建的单位,这样就能操控这个最后创建的单位了,但是这种方法面临一个问题
比如中间加上等待,后面再获取最后创建的单位就万万不可了,因为你根本无法知道等待的这段时间内有没有新的单位被创建,如果有,那么就不会选择到上面创建的单位,即使你只等待0.01秒都不允许这么干,这种做法是非常不安全的。
所以最后创建的单位的获取函数一定要跟在创建单位的后面,否则就容易张冠李戴了。
那么如果我们非得要等待呢?等待之后我还想操控这个单位咋办?这个时候就得使用变量,变量简单来说就是给数据(单位、坐标、整数、实数(小数)等等)取名,比如咱令某个新创建的单位叫张三,那么以后我叫张三时,就是叫的这个单位,就像给单位起外号一样,至于为啥是外号呢,因为可以对同一个数据起不同的名,比如咱又叫张三为王二麻子,那么以后不管叫哪一个名字,都是指的这个单位,很显然的,你不能把两个单位都叫做王二麻子(变量不能重名),不然你叫来的单位就可能是你最后叫王二麻子的那个单位(变量重名则后面的数据会覆盖前面的数据),因为时间短记性好。
我们看看设置变量的函数。
变量的其他函数此教程不做介绍,因为此为新手教程,其他的变量可能会比较难以理解。
变量有三种,全局变量,局部变量和单位变量
全局变量就是全局的(废话),比如我们有两个触发区域,那么第一个区域设置了一个整数变量为1919810,那么第二个区域也能接收到这个变量的值
而局部变量就是局部的,只能在设置这个变量的这个地儿用,其他地方都不认,就像你们班同学认识你,而其他班同学就不认识你一样的道理,但是由于局部变量不好用,如果使用不当就容易出bug,所以建议新手可以不使用局部变量
单位变量就是一种只能在同一个单位上使用的变量,你可以理解为单位的附加属性,或者说是挂在单位上的局部变量。
我们这里只讲全局变量(因为最常用),如果对其他的变量感兴趣的可以去查看官方文档里的变量教程:
https://easydoc.net/s/85829661/USXlrH6u/N2QX5DlZ
当单位创建时,我们立即在下面写上变量,给单位起一外号
如图所示,有三行参数,第一行写变量的类型,因为我们是给单位起外号,所以这里填单位,如果是给整数起外号,变量的类型就需要改为整数。第二行就填你想给这个变量取的外号,这里咱们填张三,最后一个参数就填我们变量给谁起外号,这里当然是最后创建的单位!
那么以后我们再需要控制这个单位时,就直接喊外号就好了!
然后保存
这样就可以了,不管中间有多少等待,或者不管在哪里,都能获取到这个单位。
Q:咱这是做坑向来着,咋让机关触发之后,玩家重生后,机关能还原?
A:简单,在游戏属性里,加载模式中把死亡重置物品选项打开
Q:我想制作那种坑向中的爆炸动画该咋做?
A:动画的制作可以参考官方文档:
https://easydoc.net/s/85829661/USXlrH6u/fVKrYLhk
需要注意的是,动画的名字是Idle(默认),否则动画不播放
Q:玩家有皮肤,但是我想让玩家玩我图时,用我规定的皮肤咋办?
A:在游戏属性里,将禁止自定义皮肤改为是
然后找到你的图的角色单位,默认为散人,然后改它的动画路径
Q:我想重复某个操作,比如想让单位一直发射子弹咋做?
A:这里需要用到[系统]-[内部计时器]函数,咱们来了解一下
内部计时器函数可以将一些函数按照一定的时间间隔重复运行,两个参数,上面填重复运行的间隔时间(时间是实数),第二个参数填运行次数(填整数,-1表示无限次),这里比如每0.1秒运行一次,次数为无限次。
计时器的初始动作只在计时器函数初始时运行一次,一般来说不需要用到
我们在计时器到期动作里写上这样一些东西就好了
首先创建一个子弹在单位(这里选择一个刺)的坐标的位置,然后令最后创建的单位向上移动,并且规定其5秒之后删除掉。为啥要删除呢?因为单位的存在会耗费机器的性能,如果同时存在的单位过多,就会引起卡顿,所以就需要定时清除掉这些已经没必要用到的单位以减少卡顿,耐久的弹幕也同样要这样做来减少卡顿。
可能这里的第一个函数比较难设置,因为它用到了三层函数,下面给出方法
注意左上角的返回类型为二维向量,实际上可以理解为坐标,二维向量是标准的说法
Q:别人触发坑时有声音,是怎么弄的?
A:其实很简单,有播放音效的函数,直接用就好了
Q:我使用了死亡重置物品之后,为啥重生后机关还可以动?如何解决?
A:这确实是个很令人头大的问题,因为死亡重置其实是重置的单位,但并不会重置动作,所以在动作还没执行完毕的时候复活,就会出现这种情况,这是由于等待或者计时器延迟了函数的运行造成的问题,所以我们需要在延时操作(比如等待函数)的后面,加上如下所示的东西就可以了。
介绍一下主要用到的函数,名字太长就不念了,咱们一般叫它条件分支函数(俗名:if函数),此函数无参数,创建出来即可
然后会看到有条件、Then动作和Else动作三个东西,此函数的意思是,若条件满足,则运行Then里的动作,若不满足,则运行Else里的动作,起到一个判断的功能。
这是大家第一次接触条件函数,所以详细的操作步骤如下,点击条件以添加函数
(注意左上角的返回值为布尔,布尔值就只有两种,真(True)和假(False),此值就是条件函数的返回值)
条件设置完毕之后,只需要在Then动作里加上如下的函数就可,同样的是无参函数
好了,我们可以把这个条件分支函数复制粘贴到所有等待函数的后面即可
Q:咱想做一个单位,使它可以受重力影响,并且刚创建时,往上抛动之后下落,能整吗?
A:当然能!要使单位能受到重力,那么就需要单位有物理属性,所以就需要把单位设置为物理单位类型(这里新造了一个单位数据,名为“重力墙”)
设置好之后还需要给它一个重力,这里我们在刚体数据中找到重力,设置为1
这样,这个单位就能有重力了!
接着,我们可以使用设置速率函数(此函数只能用于物理单位)以给单位一个初速度,但是由于需要这个单位一创建就给它一个往上的速率,所以咱得写在[自定义技能(初始)]技能里,我们给这个墙加上这个技能
此技能会在单位刚刚创建(即刚出生)时运行,我们在技能的初始运行动作里写如下动作
其中自身单位函数可以在[单位]类函数中找到,速率有两个值,左边为x轴向的速率,右边为y轴向的力,这里只是向上抛,所以直接在y轴上设置一个正数的速率即可。
将这个单位放置在场景中,我们运行一下就会发现,这个单位只下落,而一开始没有上抛,说明我们的函数没有起效,这就需要在我们在技能的动作里的第一条写上:等待0.01秒
这样就能运行了!不过这是为啥呢?这里是因为当单位在初始化(刚创建)时,自定义技能(初始)先运行了,但此时这个单位还没有加载出物理属性,所以此函数不生效,故我们需要等待0.01秒,让单位的物理属性给加载出来,再运行设置速率的函数。
好了以上就是本章的全部内容了,内容非常的多,也非常的精彩,感谢收看!希望在通过以上教程的学习后,你们能做出让自己满意的作品!
编辑器新手入门交流与讨论可加入官方二群,群号:979717879