银河编辑器吧 关注:6,220贴子:71,740

【系列教程】触发器入门_1:触发器技能的制作

只看楼主收藏回复

本教程仅供新手入门,已入门者可以不看了。
触发器部分,也就是一般所说的脚本部分,是制作地图基础中的基础,一般被认为是星际争霸2编辑器里上手相对简单的部分,但不要轻视它,触发器也一定是最终限制你的地图表现力的最困难的部分。
触发器是一款自定义地图最重要的组成。一切关于游戏剧情、自定义游戏系统、特殊资源、界面交互等等等等都需要在这里进行。
以前鉴于大多数作者都使用过War3地图编辑器,所以触发器方面的教程比较少。但最近纯新人越来越多了,7键觉得写个触发器教程应该是有必要的。
随写随发,比较慢,见谅。


IP属地:广东1楼2014-09-05 19:37回复
    1:触发器是什么?触发器和脚本的关系是什么?
    触发器是暴雪的游戏编辑器里的游戏脚本形式。通过在编辑器中编写各类逻辑关系,从而在游戏实际运行的时候,实现我们对游戏的各种设计。如果你想要做出不拘泥于星际2对战的地图,或者是一个和游戏本体有比较大差别的地图,那么你必须使用触发器。
    因为星际争霸2编辑器使用的GUI翻译十分先进,所以在星际争霸2编辑器里,触发器可视化界面(以下简称GUI)与触发器脚本语言(以下简称Galaxy)没有本质的区别。新人接触触发器时不必要强求学习Galaxy语言本身,事实上,一个大型的地图,可读性和易维护性是最高的需求,特别不建议在非必要的时候随意使用大量的Galaxy自定义代码。
    2:学习触发器需要什么知识?
    需要清晰的思维,计算机脚本非此即彼,一点错误都不得有闪失,游戏会用报错甚至崩溃来回报你的粗心,所以心境是很重要的。另外你需要有比较高的理解能力和学习能力。星际争霸2自带的固有函数(API)可不像War3那么少,
    如果有C系语言(包括C、C++、C#、Java、等等等等)的知识的话,也会对你学习触发器有帮助,但没有也无所谓。
    如果你对星际争霸2的资料编辑器相当娴熟,那么对学习触发器是很大的助力。游戏是一个整体,互相之间是相互影响的,你掌握了资料部分的话,只要用点心,触发器部分你会很快学会的。
    3:触发器好学吗?
    绝对好学。触发器部分的上手相当容易,如果你从来没接触过触发器的话,今天看了这个教程你就能做出一定的成果了。


    IP属地:广东2楼2014-09-05 19:53
    回复
      2025-08-20 09:50:25
      广告
      不感兴趣
      开通SVIP免广告
      请问七键,新人花多久学习可以有用银河编辑器做dota类游戏的能力,假如我每天学8个小时。(我在这方面零基础,只是在游戏层面比较了解dota类游戏,另外系统学过C++)这不是个好问题,但是希望前辈能给解惑。


      来自手机贴吧6楼2014-09-07 02:19
      收起回复
        我们在制作的时候就需要设计好技能的表现方式和限制,比如这里,我们并不希望同一个单位多次遭受同一次技能的攻击,所以需要一些设置在攻击时排除掉已经被攻击过的单位。

        就这样,我们用一个单位组对象来记录已经被攻击过的单位,然后在攻击的时候,确认一下被攻击的单位是否在这个单位组中,就能排除被攻击的单位了。
        变量也申请好了,接下来就写动作吧。

        这就是这个T技能的全部动作了。排除掉注释,可以见到一共也没几行。
        下面就来解释一下里面的写法。
        1:为每个整数
        俗称遍历操作,这个动作可以让一段动作循环若干次,而每次循环的时候那个用于循环的变量整数都会发生变化。比如,这里是从1到10,每次增量1的整数a,那么在实际运行时,第一次循环运行时a为1,第二次时a为2……第十次时a为10。这样就可以利用这个不断变大的a做到让每次循环都有所不同的效果。
        2:在点处创建演算体
        “演算体”是控制SC2模型和音效的中间层,其实7键更喜欢这样解释,演算体“就是模型”或者“就是音效”,而资料里的模型和音效只是相当于“模型链接”和“音效链接”。在点处创建演算体,如果创建的演算体是模型类别的,那么就可以理解为“在点处创建模型”。
        然后我们就可以通过“上一次创建的演算体”来获取这个模型,并且对其进行操作了。关于演算体的操作,几乎全部需要用“发送演算体消息”这个动作来进行。
        这里我们创建的是一个特殊设置的模型演算体,我会将演示地图放到教程最后,你们可以看看是怎么制作的。
        3:极点偏移点
        对于War3的作者,这个极点偏移点就是“极坐标偏移”,然后这一段你们可以不用看了。
        对于没用过War3的作者,极点偏移点的作用就是,以一个原点、一段偏移量、一个角度,就可以确认一个新的点的位置,比如说,原点在(5,3),偏移量为2,角度为90°,那么这个极点偏移点就在(5,5)的位置。
        如果我们固定原点、固定角度、而随着每次循环改变偏移量的话,就制造出了一串射线状的点,这也就是我们想要的结果。我们这里将原点固定为施法者的位置点,角度固定为施法者到目标点之间的角度,而将距离设置为a*1.2,这样第一次循环时a是1.2,第二次循环时a是2.4,第三次循环的时候a是3.6,依此类推。


        IP属地:广东7楼2014-09-07 07:38
        回复
          4:挑选单位组中的每一个单位 or 为单位组中的单位
          很多新人总是使用“附着到区域的单位”呢,真是乱来……还是那句话,电子计算机不存在“同时”,我们必须使用遍历的方式来对复数的目标进行操作,而没有对一大片单位同时下达操作的说法。
          “挑选单位组中的每一个单位”可以遍历某个单位组,然后通过“被挑选的单位”对这个单位进行操作。而单位组可以使用“区域内匹配条件的单位”,可以获取某个区域内符合一定条件的单位,这样就达到了我们想要搜索一个区域内的单位并对其进行操作的目的。
          5:if then else
          使用if then else句式可以做出条件判断,如果xxx,则yyy,否则zzz。这是非常常用的一条动作。在这里,我们要判断被挑选出的单位是否是施法者的敌人(否则我们的T技能就会误伤友军啦),还要判断这个被挑选的单位是否已经被当前技能击中了,避免重复伤害。
          6:伤害单位(源于单位)
          这个动作可以对某个单位造成直接伤害,并且伤害的发起者可以指定。这样的话,如果被伤害的单位死了,击杀数和经验值就会算到伤害发起者的身上。这个动作需要指定一个伤害效果作为基础,如果你想完全用触发器来控制伤害量,那么这里就应该指定一个无伤害的伤害效果,并在这里指定具体的伤害量。
          7:添加单位到单位组
          我们已经对这个单位造成了伤害,为了避免在下一次循环中重复搜索到这个单位造成重复伤害,我们应该将这个单位添加进我们刚才新建的单位组对象中。因为我们在上面伤害时使用了“单位不在单位组内”这样的条件,添加进了那个单位组后,这个单位就不会被下一次搜索伤害到了。
          8:等待
          我们设计这个技能是一路轰过去的,每次轰击之间有一定的间隙时间,于是我们可以在每次循环结束的时候使用“等待”以等待一点点时间,然后循环才会继续运行。
          对War3的作者,不要忌讳在SC2里使用“等待”,galaxy的效率很高,可以同时支持非常多的线程而不会出现拖慢和错误。


          IP属地:广东8楼2014-09-07 08:00
          回复
            演示地图下载:
            http://pan.baidu.com/s/1mghx4qW


            IP属地:广东11楼2014-09-07 08:11
            回复
              先mark再仔细研究。


              IP属地:江苏13楼2014-09-07 08:57
              回复
                先mark再仔细研究。


                IP属地:江苏14楼2014-09-07 08:57
                回复
                  2025-08-20 09:44:25
                  广告
                  不感兴趣
                  开通SVIP免广告
                  表示一般用物编做技能的也来学习下,感觉比物编简单点


                  IP属地:湖北15楼2014-09-14 20:23
                  回复
                    可怕,求教破解编辑器


                    IP属地:广东16楼2014-09-17 20:42
                    回复
                      路过学习


                      来自手机贴吧17楼2014-09-18 01:17
                      回复
                        受教了,谢谢!


                        IP属地:内蒙古18楼2014-09-18 07:38
                        回复
                          真棒


                          来自Android客户端19楼2014-09-18 20:04
                          回复
                            http://LZ辛苦了


                            21楼2014-09-25 01:43
                            回复