高玩教你制作1.13轨道炮以及追踪弹道修正系统
厂商 2018-06-29 15:19:23 浏览 人评论
下面小编为大家带来我的世界1.13轨道炮制作教程,想在游戏中制作威力强大的轨道炮吗?那么这个帖子一定能满足你的愿望,想试试的玩家一起往下看看吧~!
跳过剩余的开场白,这次分享一个轨道炮的实现方法。
不过轨道炮的子弹只是来卖萌的而已,呈现的核心部分在于实装在其之上的 追踪弹道修正系统
此追踪并非百发百中的必中,而是根据追踪目标的位置 对自身的弹道进行偏移修正,
通俗的说就是子弹的前进方向随着目标移动慢慢偏向目标位置,可实现更加真实的特效。
此模块可自定义 追踪的目标点 ——追踪目标的头部或脚部,也可自定义 追踪时的偏移速度 和 追踪角度范围
效果图:
追踪范围内——追踪成功效果
目标超出追踪范围——追踪失败效果
那么进入讲解环节
本次讲解涉及1.13的指令,如果对指令不了解的同学请自行转到指令讲解贴内学习
重点讲解追踪部分的运算,子弹的移动效果实现不做讲解。
追踪模块代码:
#子弹追踪曲线修正
#Usage: execute as @e[tag=bullet,...] at @s run function pack:(...)/bullet_tracking
#Scoreboard
scoreboard objectives add Bullet_RotX dummy
scoreboard objectives add Bullet_RotY dummy
scoreboard objectives add ToTarget_RotX dummy
scoreboard objectives add ToTarget_RotY dummy
scoreboard objectives add Math dummy
#Get_Data
execute store result score @s Bullet_RotX run data get entity @s Rotation[0] 1000000
execute store result score @s Bullet_RotY run data get entity @s Rotation[1] 1000000
#Get_ToTarget_Data
execute as @s at @s anchored feet run tp @s ~ ~ ~ facing entity @e[type=!player,tag=!bullet,distance=..20,limit=1] feet
#瞄准位置(eyes/feet)
execute store result score @s ToTarget_RotX run data get entity @s Rotation[0] 1000000
execute store result score @s ToTarget_RotY run data get entity @s Rotation[1] 1000000
execute store result entity @s Rotation[0] float 0.000001 run scoreboard players get @s Bullet_RotX
execute store result entity @s Rotation[1] float 0.000001 run scoreboard players get @s Bullet_RotY
#-----水平偏移-----
#Offset_Calculation
scoreboard players operation @s Math = @s ToTarget_RotX
scoreboard players operation @s Math -= @s Bullet_RotX
# 偏移探测范围↓ 偏移角度参数↓
execute as @s at @s if score @s Math matches -90000000..0 run tp @s ~ ~ ~ ~-2 ~
execute as @s at @s if score @s Math matches 0..90000000 run tp @s ~ ~ ~ ~2 ~
#-----竖直偏移-----
#Offset_Calculation
scoreboard players operation @s Math = @s ToTarget_RotY
scoreboard players operation @s Math -= @s Bullet_RotY
# 偏移探测范围↓ 偏移角度参数↓
execute as @s at @s if score @s Math matches -90000000..0 run tp @s ~ ~ ~ ~ ~-2
execute as @s at @s if score @s Math matches 0..90000000 run tp @s ~ ~ ~ ~ ~2
复制代码
此代码附件内同样也有,需要的同学可自行搬用
核心思路:
1.13指令系统中,记分板能够读取实体的NBT数据,并存储为整形(integer),因此可以将实体的Rotation存储到记分板内。
但实际的情况中,实体的Rotation是浮点数(float),为了使追踪系统尽量精确,需要将存储到记分板的 小数 数值进行放大,
把小数的数值转换成整数存储进记分板,在数据回调至实体NBT时再缩小存入。
简单介绍记分板的作用:
Bullet_RotX、Bullet_RotY —— 分别存储 子弹实体 实时的Rotation X、Y的数值
ToTarget_RotX、ToTarget_RotY —— 分别存储 子弹实体 基于面向追踪目标状态 的实时 Rotation X、Y 的数值
Math —— 对以上四个记分板数值的运算结果存储
每部分算法分析:
Get_Data —— 将子弹的Rotation放大1000000倍,存入Bullet_RotX、Bullet_RotY记分板中
Get_ToTarget_Data —— 以子弹面向目标时的Rotation放大1000000倍,存入ToTarget_RotX、ToTarget_RotY记分板中
再将子弹原先的朝向数据,通过Bullet_RotX、Bullet_RotY的值 缩小1000000倍 赋值回去
*注意,这里可以修改追踪目标的追踪位点——头部或脚部
接下来的运算就不必多说,将ToTarget_Rot 数据减去 Bullet_Rot ,对应结果存入Math记分板中 ,对Math的值进行判定,执行对应的朝向tp旋转
*注:在这里可以同时调整旋转的程度 ,以及Math的范围判定调整(甚至可以..0 , 0..这么玩)。
当然,这个追踪系统只包含水平和竖直方向上的追踪,没有实现任意弧度的追踪,
但可在此基础上做 朝向分段判定拓展,实现不同偏移加速度。
BT手游
相关阅读
- 《阴阳师》大将呱世无双成就攻略
- QQ金融版QTrade申请方法介绍
- 橙体符、绝版时装限时放送!新天龙消暑节活动大爆料!
- 乱世王者诸葛亮头像怎么得 诸葛亮动态头像获取攻略
- 第五人格祭司娇喘视频 祭司娇喘福利
- 第五人格黄衣之主缺点曝光 尽不能打出隔板刀
- 云裳羽衣玄麒约会幽境奇物过关技巧 选芳绮套和呦呦套
- 逆水寒牢狱风云支线任务怎么做
- 逆水寒技不如人奇遇攻略
- 马里奥网球Aces怎么解锁新角色,新场地
- 绝地求生Steam连接中断,玩不了游戏的解决办法
- 闪耀暖暖第一章番外2高分搭配 外套选完美程序
- WIN10自带实用鼠标按键功能解放你的双手
- 碧蓝航线异色格复刻新船怎么样 新船简评
- 电竞世界杯FIFA足球世界次轮收官战 瑞典闪耀MVP 波兰德
- QQ飞车手游酥脆饼干怎么获得 有什么用
- 绝地求生刺激战场限时物品兑换物品介绍
- QQ飞车手游呆萌熊猫发饰获取方法介绍
- 《碧蓝航线》复刻异色格C4打捞表
- FIFA足球世界如何获得世界杯代币 世界杯代币获得方式
- 非人学园战士英雄哪些比较强 战士英雄排行
- 闪耀暖暖第一章番外4高分搭配 耳饰选少女的礼物
- 绝世武林赚钱攻略 金币怎么获取
- 绝地求生刺激战场限时物品兑换方法介绍
- 《云裳羽衣》天渊支线第五章攻略
- 《碧蓝航线》复刻异色格D1打捞表
- LOL对决之令是什么?LOL对决之令怎么获得?
- lol神王对决之令可以兑换什么?
- dnf2018夏日套DJ宠物技能属性怎么样?
- 灵魂筹码游戏背景介绍
最新评论
精彩内容推荐
更多+-
谁是MVP大魔王 IC
次元决战,玩转巅峰!8月4日歌手ICE杨长青将...
-
《最终幻想14》7.
《最终幻想14》7.0版本电子典藏包预购开启!...
-
《放开那三国3》星
征战四载,追梦不停。《放开那三国3》四周年...
-
伞舞韶华绘身入画
夏日炎炎寻清凉,新裳翩翩消暑光。夏日商城...
-
《剑侠世界端游》
《剑侠世界端游》年中资料片“与君相伴”7月...