Видит ли игрок entity?

Версия Minecraft
1.12.2
1,006
36
206
Как проверить видна ли сущность игроку(то бишь, есть ли она вообще на экране)? Я догадываюсь, что с вектором взгляда можно что-то придумать, но я в геометрии не силён.
 
Решение
Зависит от того, где тебе это нужно делать. На клиенте - легко, через всякие рендеры или через frustum(в принципе, рендер итак уже использует фрустум). На сервере можно, допустим, через скалярное произведение вектора:
старый код с форума:
Vec3 visionVec = player.getLook(1.0F).normalize(); // или что-то похожее
Vec3 targetVec = Vec3.createVectorHelper(entX - player.posX, entY - (player.posY + (double) player.getEyeHeight()), entZ - player.posZ).normalize();
double dotProduct = visionVec.dotProduct(targetVec); // надеюсь, эту функцию всё ещё не убрали
boolean inFOV = dotProduct > 0.1 && player.canEntityBeSeen(ent); // Если скалярное(dot) < 0, то игрок не смотрит на блок вообще.
return inFOV; // в поле ли зрения
Попробуй через объект игрока найти метод аля canSee.
И так же можно посмотреть посмотреть в АИ Зомби.
 
Зомби же через блоки не видит игрока
 
Зависит от того, где тебе это нужно делать. На клиенте - легко, через всякие рендеры или через frustum(в принципе, рендер итак уже использует фрустум). На сервере можно, допустим, через скалярное произведение вектора:
старый код с форума:
Vec3 visionVec = player.getLook(1.0F).normalize(); // или что-то похожее
Vec3 targetVec = Vec3.createVectorHelper(entX - player.posX, entY - (player.posY + (double) player.getEyeHeight()), entZ - player.posZ).normalize();
double dotProduct = visionVec.dotProduct(targetVec); // надеюсь, эту функцию всё ещё не убрали
boolean inFOV = dotProduct > 0.1 && player.canEntityBeSeen(ent); // Если скалярное(dot) < 0, то игрок не смотрит на блок вообще.
return inFOV; // в поле ли зрения
 
Последнее редактирование:
Назад
Сверху