视线检测实体
intermediate
本教程介绍如何通过资源包检测玩家是否正在注视某个实体。下方代码需要放置在会被玩家注视的实体文件中,当实体被注视时,变量v.look_at_entity将返回true。
变量设置
RP/entity/mob.entity.json
json
"pre_animation": [
"v.look_at_entity = Math.abs(Math.abs(q.rotation_to_camera(1) - q.camera_rotation(1)) - 180) < (20 / q.distance_from_camera) && Math.abs(q.rotation_to_camera(0) + q.camera_rotation(0)) < (10 / q.distance_from_camera);"
],TIP
由于查询函数q.rotation_to_camera是基于实体脚部原点计算的,垂直检测范围会以实体底部为基准。下方代码创建了一个改进版垂直角度变量,通过位置偏移使垂直检测范围能基于实体中心点计算。
RP/entity/mob.entity.json
json
"pre_animation": [
"v.rotation_to_camera_0 = -Math.atan2(-q.distance_from_camera * Math.sin(q.rotation_to_camera(0)) - 1, q.distance_from_camera * Math.cos(q.rotation_to_camera(0)));",
"v.look_at_entity = Math.abs(Math.abs(q.rotation_to_camera(1) - q.camera_rotation(1)) - 180) < (20 / q.distance_from_camera) && Math.abs(v.rotation_to_camera_0 + q.camera_rotation(0)) < (60 / q.distance_from_camera);"
],参数调整
当前代码针对标准Minecraft生物尺寸(1格宽×2格高)进行了精确适配。若实体尺寸不同,需要调整以下参数:-1控制生物中心点的垂直偏移(负值上移,正值下移),20控制水平角度敏感度,60控制垂直角度敏感度。
原理说明
该变量通过检测"实体看向玩家所需旋转角度"与"玩家看向实体所需旋转角度"是否互为反向,来判断玩家是否正在注视该实体。水平与垂直角度敏感度会根据实体与摄像机的距离进行动态调整,确保检测精度。



