概念: 击退=突进,简单来说就是快速冲刺。
教程使用UI:YDWE1.17,没有注入额外代码
首先大家要明白一个原理,电脑中的平滑移动只是快速进行位置变化,欺骗人类眼睛的1/24秒的最高判定范围,使图象看起来是在做"连续动作"。因此明白这个道理后,做击退也就没那么困难了。 (PS.传说有些魔术师的手速移动能超出1/24秒,因此能在无道具辅助下做出匪夷所思的事情)
击退制作要点: 1、循环每段时间设置坐标的方法 2、遇到障碍物停下
设置坐标的优势在于效率高且不用排泄,数学不好不懂坐标的同学也没关系,只要记住以下公式就能应付击退了。向着单位面向角度移动20距离,X、Y设置如下 Set X = ((unit所在X轴坐标) + ((Cos(面向角度)) x 20)) Set Y = ((unit所在Y轴坐标) + ((Sin(面向角度)) x 20)) 更多坐标知识请看:https://www.ou99.com/thread-82447-1-1.html 还是不懂的同学也没关系,照着做的OK
连贯移动只需要循环计时器,然后按照上面的方法设置坐标的能达到连贯移动了。
接下来是击退一直以来存在的难点,即判定不可击退地区,比如悬崖、树木、水域、单位等等,无视这些的话会导致被击退单位卡住无法动弹。
以前的方法是设置一个“探路者”的角色先行移动,并匹配“探路者”的实际坐标与所要移动的坐标是否一致,不一致的话就停止击退,这个方法虽然能解决判定问题,但是效率的话仍稍有欠缺。因此在这里感谢<大师与天才>前不久发明的布尔值建造法,能更高效且巧妙地完成这个判断。
原理: 1、发布命令给单位会返回一个成功与否的布尔值。 2、建造单位(不是建筑)需要所建造区域符合单位的移动类型与触碰。 3、拥有“幽灵”的单位不会阻碍单位的建造。
因此,我们先来设置一个农民马甲,把人族农民Ctrl+C和Ctrl+V一下,并设置以下项目: 1、战斗-允许攻击模式-无 2、技能-普通-幽灵(可见的)、蝗虫、修理(人族) 3、显示-模型文件-none.mdl 4、显示-阴影图象(单位)-没有 5、显示-特殊效果-没有 6、状态-单位类别-无 7、状态-黄金消耗-无 8、状态-占用人口-0 9、状态-生命回复-(-1000) 10、状态-视野范围(白天)-0 11、状态-视野范围(夜晚)-0 12、状态-隐藏小地图显示-TRUE 13、科技树-可建造建筑-(就现在这个单位,自己建造自己) 14、移动-基础速度-0 15、路径-碰撞体积-32
这样一个进化版的探路者就出现了!接下来还要进行一个重要的事情,在物体编辑器里按下Ctrl+D,这时候会发现单位名字前多了一些字符,如下图
那么我们把它们记录下来,比如我的是h000
接下来进入触发部分
新建变量: 计时器Timer——(循环时间设置坐标) 单位Unit——(击退单位) 实数Degree——(击退方向) 实数Speed——(击退速度,即每次循环时间内移动的距离) 实数Distance——(击退的总距离) 实数X——(击退的X坐标) 实数Y——(击退的Y坐标) 布尔Boolean——(判断前方是否有障碍物)
下面是我做的事例,启动条件是我输入一个数值,然后圣骑士向前突进这个数值
start ┣━事件 ┃ └—玩家 - 玩家1(红色) 输入 <空字符串> ,信息过滤方式 包含字符串 ┣━条件 ┗━动作 ├—计时器 - 启动 Timer,应用计时方式: 循环,计时周期为 0.02 秒 ├—Set Unit = 圣骑士 0001 <预设> ├—Set Degree = (Unit 的面向角度) ├—Set Speed = 20.00 ├—Set Distance = (转换 (输入的聊天信息) 为实数) └—单位 - 添加 幽灵 (可见的) 给 Unit
rush ┣━事件 ┃ └—时间 - Timer 到期 ┣━条件 ┗━动作
注释:这里所用的“COS”“SIN”都是后缀没有“<New>”的那个
├—Set X = ((Unit 所在X轴坐标) + ((Cos(Degree)) x Speed)) ├—Set Y = ((Unit 所在Y轴坐标) + ((Sin(Degree)) x Speed))
注释:由于YD还没有加入获取命令成功布尔的功能,因此接下来需要我们自己运用自定义代码
├—自定义代码: set udg_Boolean=IssueBuildOrderById( CreateUnit(GetOwningPlayer(udg_Unit), 'h000', udg_X, udg_Y, udg_Degree), 'h000', udg_X, udg_Y )
注释:这段代码是新建农民建造自己的命令,可以看到我们刚刚在物编里记录的字符“h000”被调用了2次,这就是你们以后要修改的地方,其它“Boolean、Unit、X、Y”这些变量按照你设置的变量名改动就OK,绝对不能去掉“udg_”
├—如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 运作) │ If - 条件 │ Or - 任意条件成立 │ 条件 │ Boolean 等于 FALSE │ Distance 小于或等于 0.00 │ Then - 动作 │ 计时器 - 暂停 Timer │ 单位 - 删除 幽灵 (可见的) 从 Unit │ 跳过剩余动作 │ Else - 动作
注释:上面这个判定就是用来判定可否可以击退过去。
├—单位 - 立即移动 Unit 到(X,Y) ├—特殊效果 - 删除 (新建特效 Abilities\Spells\Human\HolyBolt\HolyBoltSpecialArt.mdl 在(X,Y)处)
注释:通过判定后可以为自己的击退加些效果,比如我这里就加入的神圣之光的特效,记得排泄。
├—Set Distance = (Distance - Speed) └—如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 运作) If - 条件 Distance 小于或等于 0.00 Then - 动作 单位 - 删除 幽灵 (可见的) 从 Unit 计时器 - 暂停 Timer Else - 动作
注释:这个判定是计算是否到达击退最大距离从而停止击退
结语: 那么如此简洁的一个击退触发就完成了,我们可以自己制作所需要的击退触发,而不必依赖YD死板的击退函数,大家可以在我创建特效的位置尽情增加想需要的动作。
|