————————————————————
希望你在看此章节之前,看完了前面的四个章节,否则可能会不太懂接下来的教学。
终于到了咱们的坑向教学,各位兴奋吗?从这一章开始,Konux将带领大家逐步进入神奇的触发器世界,当然本章并不涉及触发器,下章才会教学,但本章会为学习触发器打牢基础,所以一定要好好掌握本章的内容,从这一章开始,学习难度可能会直线上升,同时,你的编辑器实力也是如此,是挑战,也是机遇,希望大家hold的住。
以下为本章知识点:
· 坑向制作的思路
· 动画的制作
· 玩家单位相关技能
· 触发区域的使用
· 函数编辑器的使用
· 常量、变量与函数
· 单位的中心点
· 常见函数详解
· 对单位部分属性的使用
· 物理单位的使用
新的开始
啊哈,又是熟悉的界面,又是熟悉的画风!




坑向制作思想
相信有不少新人在首次制作坑向时,都会露出张三般邪恶的笑容,想把玩家往死里整,以发泄自己玩坑向时的愤怒,这种行为超级正常,但是它行不通。我们如果是站在玩家对立面的角度来设计一个地图或者说游戏,那么它一定是失败的!我们制作游戏的初衷是什么?游戏应该是能给人带来快乐的第九艺术,不管是什么形式的快乐,总之绝对不是折磨。跳刺,玩家一直死,他有快乐吗?有,当他过了某个刺型之后,会产生非常大的成就感(虽然这个成就感只适用于有实力的个体),坑向,玩家一直被坑,他快乐吗?非常快乐,因为那些坑非常有意思,那如果这个坑向做的很无聊而且各种恶意(不是恶趣味),还快乐吗?快乐个锤子,玩家可以选择不玩,并给你个踩,这样你满脑子的恶意坑不到任何人,相当于你白做了。
那么什么叫做恶意的坑?比如设置一个砖块、存档等无伤害的东西碰到就死且不给出任何提示效果,速度特别快的刺使玩家反应不过来秒死、坑向结合难度高的跳刺、满屏的碰撞显示砖块等等,最直接的方法是去自制关卡的萌新区找坑向地图,多玩几个(因为有的萌新做的坑向还可以)你就能感受到了。
坑向注重坑,坑一般需要合理的展现,而不是让玩家啥都没干就死了,坑的过程要让玩家能反应过来是怎么被坑的,而不是让玩家去猜。所以做坑向时,应该打开脑洞去想坑型,怎么离谱怎么想,并且要站在玩家的角度去思考坑法,将自己带入进去,想像如果自己是玩家,该怎么走,该怎么想,从而针对玩家做出相应的坑型。
好了废话就说到这里(才不是),我们做坑向的第一步就是做出地形,地形要怎么样有创新呢?拿官方教程里Aikesi做的地形举例子,咱大致勾画一下,就长下面这样

那么首先我们得瞎糊一个玩家路线,路线不要太简单,不要太复杂,不可交叉(新手阶段建议别交叉,高级制作可以),Konux在这里随便画一个,注意路线是横竖组成的直线



如果需要了解坑型的常规套路,可以进入下方我写的坑向理论的教程链接进行阅读:
https://easydoc.net/s/85829661/USXlrH6u/skih7IXY
函数编辑器
好了,接下来就开始讲解重点技术环节,在坑向中如果想让刺能听我们的命令来做一些事,就需要写动作了,动作是个啥呢?你可以理解为脚本,你写好动作后,游戏就会根据你写的动作里的内容而执行相应的一些事情,而动作里装的就是一堆的函数(脚本里对应为代码)。可能这并不易于理解,我们先上手试试就行。
找到触发区域单位,将它摆出来



接下来我们双击动作属性,写一下动作(也叫函数组,因为动作里装的就是一堆函数),点击左上的新建函数,就可以看到以下的东西

1:新建函数(快捷键:C)
2:编辑函数(快捷键:E)
3:复制函数(快捷键:Ctrl+C)
4:剪切函数(快捷键:Ctrl+X)
5:粘贴函数(快捷键:Ctrl+V)
6:设置函数的激活状态(函数是灰色的就表示未激活,此状态下,函数不执行)( 快捷键:A)
7:删除函数(快捷键:Delete)
咱上面讲了一堆的函数,那么说到底,啥是函数?是数学里的函数y = f(x)吗? 是,也不是!程序里的函数和数学上的函数不同,但从广义上来说又有共通之处,函数一旦它们的参数(比如x值)确定,那么函数就能输出一个确定的值,在我们的编辑器中也是类似,只要函数的参数确定,那么函数就能根据你的参数而去做一些特定的功能,比如让刺往上飞。



好了,由于我们要对刺做操作,刺是单位,所以就应该选择的是单位分类里的相关函数,我们要让刺干啥?飞?不不,这叫移动,所以可以找到如下的一个函数










那么或许有人有这样一个要求,想做一个连环坑,比如让刺连续移动,就像下图这样




要解决这个问题,首先我们需要理解动作(函数组)的运行机制



可能细心的读者会注意到有这样一个函数,指定速度的移动

这里先科普一下速度的概念,我们小学一年级在数学课的讲台上,体育老师就曾经教过我们v = s/t,也就是速度等于位移除以时间,在游戏里也一样,比如速度为2,我们就能算出这大概就是每1秒钟走s = vt(速度乘以时间) = 1*2的距离,大概是2/0.64 = 3.125个格子(网格)。
现在我们来解释为什么坑向一般用指定时间的一些函数,而很少选择指定速度的函数,这两个函数其实都可以达到同一效果,但是如果我们要加等待呢?等待多少秒合适?如果是以时间为基准的函数,那么我们不用算就能得到准确的等待时间,如果用速度呢?这个时间需要计算s/v才能得到一个准确的结果,这个s就是起点到终点的距离,要是做坑向每做一个函数就得做一个计算题,那就相当不方便,所以一般来说,我们更习惯使用指定时间的函数。
好了,以上就是函数编辑器最基本的用法,接下来将以问答的方式来边问边学
问中求进
Q:咱看到函数里有些带偏移的函数,偏移是啥意思?
A:改变分为绝对改变和相对改变,大部分函数的参数是绝对改变,即有一个确定的参考值,而偏移就指的是以自身的参数为标准的相对改变。打个比方,张三上次考试考了100分,这次考试考了90分,那么这次考试的绝对分数就是90分,而他的分数偏移就是-10分。偏移就是以原本的参数做为基准。比如坐标偏移(如下)


Q:能让玩家不能控制吗,又如何解除控制?
A:一般需要让玩家不能操作的,就要使用[暂停]函数,就是下面这个,暂停函数能够暂停单位上大部分技能的运行。





但我们要研究问题的本质,为什么暂停主机玩家单位就能让玩家控制不了角色呢?暂停函数的功能是?暂停单位的技能,那么想必事情都归结在了主机玩家单位的技能上,我们打开数据编辑器,看看主机玩家单位


单位 == 属性 + 技能(再次提醒)
玩家能够控制角色,就是因为玩家单位有[玩家控制]技能
玩家能使用物品(比如枪),就是因为玩家单位有[物品控制]技能
玩家能重生,就是因为玩家单位有[玩家重生]技能
玩家能存档,能用传送门传送,就是因为玩家单位有[玩家交互]技能
只要把其中的一个技能给删了,那么玩家就会失去这个技能所对应的功能,但是强烈建议新手不要这么干(特别是[玩家重生]技能),这种操作需要有一定的经验了才能驾驭,否则相当容易出bug。
在这些技能里有些属性,各位可以根据需要进行设置,比如[玩家控制]技能,如果需要玩家空中只能有一段跳,就可以设置空中最大跳跃次数为1(默认值为-1,表示无限次,但因为最大跳跃次数为2,所以空中最大跳跃次数相当于2)

还有移动速度,如果想让玩家按左键,角色朝右走,按右键,角色朝左走,就可以直接设置移动速度为-3,表示玩家的速度反向
再看看[物品控制]技能,若想让玩家一开局就有某种物品,可以设置初始物品,如下图中的设置摄像头模式物品,在跳刺地图中非常常用

那么要恢复玩家就很简单了,和暂停玩家一样的操作,只需要使用[单位]-恢复函数即可

Q:还有哪些移动单位的函数,它们有什么区别?
A:大概下面这些函数

持续移动(指定速度、角度)函数就是字面意思,使单位从自身的位置开始,朝某个角度进行持续的移动,当然这个函数内也可以设置移动的距离,而角度的概念我们在第一章就解释过,上左下右依次为0°、90°、180°和270°
Q:如何让单位放大或缩小
A:单位大小的变化我们通过缩放操作来实现,可以使用如下函数




接下来我们来试试,我们想让刺从左图缩放成右图所示的样子






对于想实现以上的效果,我们有两种方法:
第一种:缩放同步移动(推荐)
既然刺的缩放时中心点不动导致没能实现这个效果,那么我们只要刺在缩放的同时把它的坐标(中心点)同步移动到缩放后的正确位置就可以了!就像下面这样,注意两个函数执行的时间必须相同才能实现同步


第二种:改变中心点(不推荐)
既然中心点不变,那么我们直接把刺的中心点设置为最下面,也可以实现朝一个方向放缩,如下图设置刺的属性

Q:如何让单位旋转?
A:旋转单位也有相关的函数,如下


相信旋转偏移的概念你们应该能理解,就是逆时针偏移为正数,顺时针偏移为负数,如下



那么咱们做个小小的综合练习,咱们想让一堆的刺做如下的运动

有同学就要问了,咱们只教了如何让刺自转,没教如何让刺绕某点旋转呀,你这不是欺负老实人吗???嗯?
诶!真的没教吗?回忆一下,我们上一章教过旋转节点的用法,是用指向使单位绑定节点,而节点又在自转,所以单位可以绕节点旋转,节点能旋转是因为它用了一个自动旋转的技能,这里我们如果换成函数控制的旋转,不也一样可以吗?
好的,我们直接开始操作,先将其它的单位都指向这个位于旋转中心坐标的刺(为了展示指向,所以把刺移了位置)

很显然右侧的刺需要朝顺时针方向旋转90°,所以偏移就是-90,咱们直接这样写





Q:如何让单位显示或消失
A:很简单,有设置显示状态的函数,在单位类函数里


Q:如何在游戏运行时创建和删除单位
A:创建和删除单位当然是要使用单位类的函数啦,很快啊,咱就找到了如下函数


好了,我们点击常量,然后选择想要创造的单位数据(注意到选项卡上面有个大大的“对象”,啊这,此对象非彼对象,这里的对象你就可以理解为是单位数据,而通过单位数据造出单位的过程,专业的说法叫做“实例化对象”,这是编程中的概念,无需了解)。


删除单位也是同理,只不过删除的是单位,而不是单位数据,至于为啥,这里应该就不用解释了。后面还有一个删除(指定时间)其实就是起延时删除的作用,非常简单,请自行尝试就可。需要说明,设置单位删除和设置单位的显示状态为否是不同的,删除是真正的把单位给删掉了,而设置显示状态为否时,单位还在,只是不显示而已。
Q:你讲了这么半天,那么函数编辑器里的常量、变量和函数到底是个啥?
A:这里是个超级重点,需要特别注意。
先解释常量,常量就是一个确定的量,比如放置在场景上的单位,它们都是确定的,你可以去选择的,在数值上,比如1、2、3、1.114514、(0.64,0.64)等等都属于常量,你可以准确的知道这个量的值,它们不会变动。
而变量就是会变动的量,也可以说是不确定的量,比如主机玩家单位,可能是散人单位,可能是Kid单位,也可能是其他的单位,它就是个变量,再比如用函数创建的单位,你从场景中选不到,这也是变量,因为创建的单位可能有各种情况,就像每个人都不同,再比如数学上的函数y=f(x),其中x就是一个自变量,x的值不确定。
函数的概念想必你们已经懂了不少,咱们上面介绍了很多的函数,函数有输入参数(也可以无参数)和输出,函数的参数可以使用常量、变量和函数,函数可以以函数作为参数(实质上是以函数的输出作为参数),一级函数(主函数)的输出是用于实现功能,而作为主函数的参数的函数的输出,实际上就是变量,所以这就是为什么旧版函数编辑器里只有常量和变量。


如下面的简单函数

Q:咱会用函数创建单位了,但是如何控制这个单位进行移动、缩放和旋转?
A: 用函数创建的单位属于什么?上面讲过了,属于变量,变量有两种获取途径,一是二级函数的输出,另一个就是直接用变量,而变量我们现在没讲怎么使用,所以只有函数一个选择。




所以最后创建的单位的获取函数一定要跟在创建单位的后面,否则就容易张冠李戴了。
那么如果我们非得要等待呢?等待之后我还想操控这个单位咋办?这个时候就得使用变量,变量简单来说就是给数据(单位、坐标、整数、实数(小数)等等)取名,比如咱令某个新创建的单位叫张三,那么以后我叫张三时,就是叫的这个单位,就像给单位起外号一样,至于为啥是外号呢,因为可以对同一个数据起不同的名,比如咱又叫张三为王二麻子,那么以后不管叫哪一个名字,都是指的这个单位,很显然的,你不能把两个单位都叫做王二麻子(变量不能重名),不然你叫来的单位就可能是你最后叫王二麻子的那个单位(变量重名则后面的数据会覆盖前面的数据),因为时间短记性好。
我们看看设置变量的函数。

变量有三种,全局变量,局部变量和单位变量
全局变量就是全局的(废话),比如我们有两个触发区域,那么第一个区域设置了一个整数变量为1919810,那么第二个区域也能接收到这个变量的值
而局部变量就是局部的,只能在设置这个变量的这个地儿用,其他地方都不认,就像你们班同学认识你,而其他班同学就不认识你一样的道理,但是由于局部变量不好用,如果使用不当就容易出bug,所以建议新手可以不使用局部变量
单位变量就是一种只能在同一个单位上使用的变量,你可以理解为单位的附加属性,或者说是挂在单位上的局部变量。
我们这里只讲全局变量(因为最常用),如果对其他的变量感兴趣的可以去查看官方文档里的变量教程:
https://easydoc.net/s/85829661/USXlrH6u/N2QX5DlZ
当单位创建时,我们立即在下面写上变量,给单位起一外号

那么以后我们再需要控制这个单位时,就直接喊外号就好了!



Q:咱这是做坑向来着,咋让机关触发之后,玩家重生后,机关能还原?
A:简单,在游戏属性里,加载模式中把死亡重置物品选项打开

A:动画的制作可以参考官方文档:
https://easydoc.net/s/85829661/USXlrH6u/fVKrYLhk
需要注意的是,动画的名字是Idle(默认),否则动画不播放
Q:玩家有皮肤,但是我想让玩家玩我图时,用我规定的皮肤咋办?
A:在游戏属性里,将禁止自定义皮肤改为是


Q:我想重复某个操作,比如想让单位一直发射子弹咋做?
A:这里需要用到[系统]-[内部计时器]函数,咱们来了解一下


我们在计时器到期动作里写上这样一些东西就好了

可能这里的第一个函数比较难设置,因为它用到了三层函数,下面给出方法


Q:别人触发坑时有声音,是怎么弄的?
A:其实很简单,有播放音效的函数,直接用就好了

Q:我使用了死亡重置物品之后,为啥重生后机关还可以动?如何解决?
A:这确实是个很令人头大的问题,因为死亡重置其实是重置的单位,但并不会重置动作,所以在动作还没执行完毕的时候复活,就会出现这种情况,这是由于等待或者计时器延迟了函数的运行造成的问题,所以我们需要在延时操作(比如等待函数)的后面,加上如下所示的东西就可以了。


这是大家第一次接触条件函数,所以详细的操作步骤如下,点击条件以添加函数




Q:咱想做一个单位,使它可以受重力影响,并且刚创建时,往上抛动之后下落,能整吗?
A:当然能!要使单位能受到重力,那么就需要单位有物理属性,所以就需要把单位设置为物理单位类型(这里新造了一个单位数据,名为“重力墙”)


接着,我们可以使用设置速率函数(此函数只能用于物理单位)以给单位一个初速度,但是由于需要这个单位一创建就给它一个往上的速率,所以咱得写在[自定义技能(初始)]技能里,我们给这个墙加上这个技能


将这个单位放置在场景中,我们运行一下就会发现,这个单位只下落,而一开始没有上抛,说明我们的函数没有起效,这就需要在我们在技能的动作里的第一条写上:等待0.01秒

好了以上就是本章的全部内容了,内容非常的多,也非常的精彩,感谢收看!希望在通过以上教程的学习后,你们能做出让自己满意的作品!
编辑器新手入门交流与讨论可加入官方二群,群号:979717879