Minecraft(我的世界)中文论坛

标题: 【思路】所指即所射!超精准的视线追踪新思路![1.15-1.16]

作者: 末地探险者    时间: 2020-4-5 19:24
标题: 【思路】所指即所射!超精准的视线追踪新思路![1.15-1.16]
本帖最后由 末地探险者 于 2020-4-6 21:12 编辑
前言:




在求助帖中基本把思路想清楚了:https://www.mcbbs.net/thread-1007529-1-1.html


到底有多准?
先看慢动作(药水云标记路径)实际效果看最下面的gif,几乎看不到arrow


核心代码
  1. summon armor_stand 0.0 0.0 0.0 {Tags:["track_work"],Rotation:[0.0f,0.0f],NoGravity:true,Invisible:true,Marker:true}
  2. execute at @s anchored eyes run summon arrow ^ ^ ^ {Motion:[0.0,0.0,0.0],NoGravity:true,pickup:false,Silent:true,damage:-1.0,Tags:["track_sel"]}
  3. execute as @e[tag=track_work] at @s rotated as @p anchored feet run tp ^ ^ ^10
  4. execute as @e[tag=track_sel] run data modify entity @s Motion set from entity @e[tag=track_work,limit=1] Pos
  5. kill @e[tag=track_work]
复制代码


当然你射什么实体都可以(只要有Motion的)



原理:
所指的参数即是Rotation的两个量。
所射的参数即是Motion的x,y,z的速度向量。
两者的联系就相当于极坐标系的ρcosθ
而ρ甚至可以随便取。经测试,速度向量最大值为10.0
接下来我要寻求cosθ的计算。一开始我想到了小豆数学库
但是我又想到:直接在(0,0,0)这个特殊的位置以玩家的方向位移ρ







所得到的(x,y,z)不就应和Motion[dx,dy,dz]吗。
结果查看小豆数学库,不谋而合。
tp 直接使用^ ^ ^10
一开始我用execute store 替换数据,结果精度相差非常大
经过@(=°ω°)丿
的指导,改用data modify直接复制坐标


实体的选择
这也是最关键的一步。
需要的实体要求:
要求 要求
所指实体 不会对该实体造成伤害/击退效果
所指方块 方便简单,还能选到非固体方块/不会透过去:就是黑框
所指固体方块 可以透过非固体方块

这样的话弹射物是比较合适的了。
经过重重测试和NBT的学习
https://www.mcbbs.net/thread-1006413-1-1.html
还有@SPGoding
的指导
我选择了以下实体
所指实体 产生了“漂浮效果”,用断言消去 潜影贝导弹
所指方块 不会透过去,只要寻找雪球死前的位置就可以了 雪球
所指固体方块 可以透过非固体方块,还为大家准备了inBlockState的NBT,非常贴心(再次感谢SPG)



使用效果和方法
命名空间 track 储存地址(标签)
所指实体 direct1 被标记为track_select,并且有track_sele的标记坐标的药水云
所指方块 direct3 上方生成一个track_select3的实体
所指固体方块 direct2 固体方块id记录在track_select的ArmorItems[0].id里,位置记录在Pos里





如何在1tick内完成寻找目标:(实验对象为箭,先不讨论其他)
我们设置1tick的速度为10,则要在1tick内找到目标,则可以在一定范围内像[0,5][5,10][10,15][15,20]做判定区间。
同时发射4支箭,讨论响应的情况:
前面响应则忽略后面
后面先响应则讨论前面响应的情况,当前面的超过该区间范围,则忽略,直接统计后面的情况
(本部分还没做,暂时是个可行的思路吧)






结果自然是好的现有的不足便是:会有颗粒无法消去

因为这只是思路,所以数据包并没有完善。
断言也是很粗糙(根本就是太泛了)
进一步可以消除颗粒等等的
版本 数据包
v 0.0.1 Directly Trackv0.zip (5.83 KB, 下载次数: 5)




感谢
SPG的帮助和DHP和Json文件生成器
Teen的帮助和data教程
小豆数学库
hans的JText
@kongbaiyo
@00ll00







file_1586082454000.jpg (109.9 KB, 下载次数: 0)

file_1586082454000.jpg

file_1586082988000.jpg (123.34 KB, 下载次数: 0)

file_1586082988000.jpg

作者: ruhuasiyu    时间: 2020-4-5 22:35
你这个的问题是无法单tick找到目标位置。而这一点往往非常重要。用投射物的想法还是很正常的。然后你可以让速度足够快使得1t内到达。最后我记得箭的pos好像和目标方块的pos有点差异吧,尤其是在方块边缘,难道现在改了?最后就是箭的rot也是很奇怪的,和实际方向差一个符号
作者: 末地探险者    时间: 2020-4-5 23:19
本帖最后由 末地探险者 于 2020-4-6 21:53 编辑
ruhuasiyu 发表于 2020-4-5 22:35
你这个的问题是无法单tick找到目标位置。而这一点往往非常重要。用投射物的想法还是很正常的。然后你可以让 ...

箭的rot非常奇怪:我尝试使用了多种data的方法同步到玩家一开始的朝向,都失败了。(不只是差一个符号,我觉得应该是最开始tp ^ ^ ^10进虚空的缘故)(不过已经有前面的盔甲架标记rot了)

单tick确实很难做到,不过在ρ=10的情况下已经是全速了(测试时速>10.0的时候会崩,这个我还不知道要怎么做),几乎是单tick(一定距离内,本命令发出后,路径上只有两个标记tick的药水云),我再想想办法

箭的pos
我是用本身弹射物NBT x y zTile作为标记的
https://www.mcbbs.net/forum.php? ... 006413&pid=17341482



单tick的我想到了
用续传(找到1tick射击的最远距离(就是ρ),然后同时射)

作者: 2362028557    时间: 2020-4-6 00:05
真的是学好数理化,走遍天下都不怕,就是有点难理解,其他都挺好
作者: 晴路卡    时间: 2020-4-6 21:07
不觉得1tick闪过的arrow很别扭么
作者: 末地探险者    时间: 2020-4-6 21:10
本帖最后由 末地探险者 于 2020-4-6 21:13 编辑
晴路卡 发表于 2020-4-6 21:07
不觉得1tick闪过的arrow很别扭么

吃不了隐形药水。。
但是没开F3+B是几乎看不到的(gif第二张就看不到了)
你可以实际测试看看
最上面的gif是慢动作(放慢10倍,才看得很清楚的)

我感觉这个的问题应该是:https://www.mcbbs.net/thread-926441-1-1.html


作者: ruhuasiyu    时间: 2020-4-6 21:24
末地探险者 发表于 2020-4-5 23:19
箭的rot非常奇怪:我尝试使用了多种data的方法同步到玩家一开始的朝向,都失败了。(不只是差一个符号,我 ...

你开碰撞箱就能看出,roty是差一个180°-roty,rotx没问题
作者: 末地探险者    时间: 2020-4-6 21:41
本帖最后由 末地探险者 于 2020-4-6 21:58 编辑




emm好像就是差了roty

(找不到头绪,为什么这样)

作者: Ruainbow_    时间: 2020-4-8 01:57
同上发射四支。。。好复杂。
为什么不试试aec骑乘箭,然后箭消失后根据aec找实体或者坐标呢?
还是说只是我没看懂
作者: VCS-Official    时间: 2020-4-8 02:12
第一眼看到:诶,数学库终于能帮到别人忙了!好感动!
仔细一看:然并卵……
视追以前有个想法,就是直接用计算的方法得到线面交点坐标,mc里的方块只有6个面,应该会很方便
但是懒豆子一直没有研究……原版模组啥的直接就用刷怪蛋了
作者: kongbaiyo    时间: 2020-4-9 15:17
VCS-Official 发表于 2020-4-8 02:12
第一眼看到:诶,数学库终于能帮到别人忙了!好感动!
仔细一看:然并卵……
视追以前有个想法,就是直接用计 ...

的确很方便!看这里
最大的麻烦就是需要定义所有方块的碰撞箱
作者: kongbaiyo    时间: 2020-4-9 15:19
如果是近距离判定的话确实比较方便了!
不过没办法判断是否碰到了实体背后的方块 有没有什么实体既会飞行 又会穿过生物的?
作者: Ruainbow_    时间: 2020-4-9 23:07
kongbaiyo 发表于 2020-4-9 15:19
如果是近距离判定的话确实比较方便了!
不过没办法判断是否碰到了实体背后的方块 有没有什么实体既会飞行  ...

恼鬼
有贯穿NBT的箭
作者: (=°ω°)丿    时间: 2020-4-9 23:15
本帖最后由 (=°ω°)丿 于 2020-4-9 23:18 编辑
Ruainbow_ 发表于 2020-4-9 23:07
恼鬼
有贯穿NBT的箭

穿透附魔的弩射出的箭(
(布尔)PierceLevel:箭能射穿实体的时间长度。
作者: 141483581    时间: 2020-4-15 21:45
这构图2333