Minecraft JE: 1.13+ 实现检测实体视线
Minecraft JE: 1.13+ 实现检测实体视线
在地图 illusion 的开发中,需要实现功能:检测目标是否在玩家的视线范围内
原本的实现思路
原本的实现思路是判断玩家前方 r 格
r 半径
内是否有目标实体,如果有则执行指令
即 execute as player at @s positioned ^ ^ ^r run execute as @e[distance=..r] run <command>
但是这种方法有一个问题:视线是一个圆锥体,而不是一个球体,这样判断的范围过于模糊
进阶的实现思路
从玩家前方 r 格
左侧 rx 格
右侧 rx 格
展开球体,判断玩家是否在交界处
但这种方法过于复杂,且实现效果一般
使用 execute 实现检测实体视线
后来在 StackExchange 的帖子上看到了一个更好的方法:
1 | execute |
通过
execute as, at
定位到玩家位置通过
anchored eyes
定位到玩家的眼睛位置通过
facing
更改指令的视线方向通过
anchored feet
定位到玩家脚部位置通过
positioned
移动到玩家前方一格通过
rotated as
旋转到玩家的实际视线方向通过
positioned
移动到玩家后方一格通过
if entity
判断视线是否重叠(即看向目标的角度和玩家的角度是否一致)如果重叠,则执行指令
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hello! I'm 0o酱!
评论