第一种

代码方法

传入目标点测试即可

 private float ScopeDistance = 2f;//扇形距离
private float ScopeJiaodu = 120;//扇形的角度
//传入目标点位置 判断在不在扇形范围内
private void ScopeIsAnimal(Vector3 vector)
{
float distance = Vector3.Distance(transform.position, vector);//距离
Vector3 norVec = transform.rotation * Vector3.forward * 5;//此处*5只是为了画线更清楚,可以不要
Vector3 temVec = vector - transform.position;
Debug.DrawLine(transform.position, norVec, Color.red);//画出技能释放者面对的方向向量
float jiajiao = Mathf.Acos(Vector3.Dot(norVec.normalized, temVec.normalized)) * Mathf.Rad2Deg;//计算两个向量间的夹角
if (distance < ScopeDistance)
{
if (jiajiao <= ScopeJiaodu * 0.5f)
{ Debug.Log("在扇形范围内");
}
}
}

里面逻辑自己添加就好

第二种

在摄像机上添加脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class CameraRay : MonoBehaviour
{
private float viewRadius = 8.0f; // 代表视野最远的距离
private float viewAngleStep = 30; // 射线数量,越大就越密集,效果更好但硬件耗费越大。
void DrawFieldOfView()
{
// 获得最左边那条射线的向量,相对正前方,角度是-45
Vector3 forward_left = Quaternion.Euler(0, -45, 0) * transform.forward * viewRadius;
// 依次处理每一条射线
for (int i = 0; i <= viewAngleStep; i++)
{
// 每条射线都在forward_left的基础上偏转一点,最后一个正好偏转90度到视线最右侧
Vector3 v = Quaternion.Euler(0, (90.0f / viewAngleStep) * i, 0) * forward_left; ; // 创建射线
Ray ray = new Ray(transform.position, v);
RaycastHit hitt = new RaycastHit();
// 射线只与两种层碰撞,注意名字和你添加的layer一致,其他层忽略
int mask = LayerMask.GetMask("Obstacle", "Enemy");
Physics.Raycast(ray, out hitt, viewRadius, mask); // Player位置加v,就是射线终点pos
Vector3 pos = transform.position + v;
if (hitt.transform != null)
{
// 如果碰撞到什么东西,射线终点就变为碰撞的点了
pos = hitt.point;
}
// 从玩家位置到pos画线段,只会在编辑器里看到
Debug.DrawLine(transform.position, pos, Color.red); ; // 如果真的碰撞到敌人,进一步处理
if (hitt.transform != null && hitt.transform.gameObject.layer == LayerMask.NameToLayer("Enemy"))
{
OnEnemySpotted(hitt.transform.gameObject);
}
}
}
void OnEnemySpotted(GameObject enemy)
{
enemy.GetComponent<Enemy>().spottedFrame = Time.frameCount;
} public Vector3 ColliderV3;
// Update is called once per frame
void Update()
{
DrawFieldOfView(); }
}

摄像机脚本

物体脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class Enemy : MonoBehaviour
{
MeshRenderer meshRenderer;
// 代表被发现时的帧数(这里用帧数代表时间)
public int spottedFrame = -100;
void Start()
{
meshRenderer = GetComponent<MeshRenderer>();
}
void Update()
{
// 通过设置 spottedFrame,就可以实现隐藏或显现
if (spottedFrame >= Time.frameCount - 10)
{
meshRenderer.enabled = true;
}
else
{
meshRenderer.enabled = false;
}
}
}

物体脚本

最后别忘了加上层级,运行测试就可以了

简单记录一下下

搜索

复制

unity 扇形范围检测目标的更多相关文章

  1. [DeeplearningAI笔记]卷积神经网络3.1-3.5目标定位/特征点检测/目标检测/滑动窗口的卷积神经网络实现/YOLO算法

    4.3目标检测 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.1目标定位 对象定位localization和目标检测detection 判断图像中的对象是不是汽车--Image clas ...

  2. Unity - Raycast 射线检测

    本文简要分析了Unity中射线检测的基本原理及用法,包括: Ray 射线 RaycastHit 光线投射碰撞信息 Raycast 光线投射 SphereCast 球体投射 OverlapSphere ...

  3. 如何用OpenCV自带的adaboost程序训练并检测目标

    参考博文: 1.http://blog.csdn.net/wuxiaoyao12/article/details/39227189 2.http://www.cnblogs.com/easymind2 ...

  4. UE4如何检测目标在锥形视野内

    转自:http://blog.csdn.net/l346242498/article/details/70237083 做UE4游戏AI方面经常会遇到一个问题,就是何如判定目标在AI单位的视野范围内, ...

  5. Unity运行时检测Altas使用情况

    UI贴图在游戏中内存大小中占的分量非常非常大,尤其对于前期对UI没有规划的项目,无论是包量还是内存大小都是需要花费很多时间去优化.如果涉及到战斗场景和逻辑场景的情况下,常用的做法就是把两个场景使用的a ...

  6. 【工作】Proxy Server的优化 - 检测目标网站URL变化

    在工作中,我在组里负责一个Proxy(代理)的Module,这个Module是针对微软的Office 365的邮件门户OWA实现,工作起来后,用户访问Office 365 OWA,无需再输入Offic ...

  7. 关于Unity中物理检测的准备

    1.要确定每个物体的碰撞类型,是有碰撞效果的碰撞还是没有碰撞效果的碰撞(is trigger),带不带刚体. 2.给每个物体分层,再设置哪些层会发生碰撞,哪些完全不产生碰撞. 3.给每个物体设置标记, ...

  8. 【Unity笔记】检测当前的运行平台

    // 判断当前运行平台为Android平台时 if (Application.platform == RuntimePlatform.Android) { if (Input.GetKeyDown(K ...

  9. 基于 python imageai 对象检测 目标检测 识别 视频

    1.视频连接如下: http://www.iqiyi.com/w_19s6vownit.html

  10. Unity射线检测的用法总结

    RayCast 射线检测 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心 ...

随机推荐

  1. Python3+Selenium3自动化测试-(七)

    在实际定位元素的过程中,发现有一种情况让人很是恼火,根据xpath路径定位,感觉像是没错哦,但是执行时就来一个报错信息--为什么呢? 多表单切换 例如我们登录网易邮箱时就会发现,定位登录框时,一个嵌套 ...

  2. wangeditor富文本编辑和vue3

    官网: wangEditor  https://www.wangeditor.com/v5/ 为啥用这个富文本编辑器(我觉得官网写自己优势已经非常好了没有啥可补充的了) 文档特别的全和友好 安装 ya ...

  3. vue学习笔记(一)---- vue指令(浪起来~~~哦耶 的案例)

    案例实现分析: 把第一个字符追加到最后一个字符身上去 基本结构: <body> <div id="app"> <input type="bu ...

  4. mysql18-Show Profile和全局日志

    1.是什么 分析SQL执行带来的开销是优化SQL的重要手段.在MySQL数据库中,可以通过配置profiling参数来启用SQL剖析.该参数开启后,后续执行的SQL语句都将记录其资源开销,诸如IO,上 ...

  5. 强大的Excel工具,简便Vlookup函数操作:通用Excel数据匹配助手V2.0

    通用Excel数据匹配助手V2.0 For Windows 通用Excel数据匹配助手是一款非常实用的数据匹配软件,可以用来代替Excel中的Vlookup函数,帮助用户轻松完成数据匹配操作,需要的朋 ...

  6. 2.11-12 滴水new-delete-vector(动态数组编写)

    去长沙玩了几天,没学 1.new 与 delete 通过调用分析了解到new在堆区开辟数据 delete就是释放数据 案例 #include<stdio.h> #include <m ...

  7. Cesium源码之Label(二)

    我们查看Cesium源码时,有时会发现源码中有大量的includeStart开头的注释,如下图所示. 这里面大多是调试信息,当使用gulp打包时,removePragmas参数设置为true,则会删除 ...

  8. Git常用指令集合🔥

    关联文章:Git入门图文教程(1.5W字40图)--深入浅出.图文并茂 指令-查看状态信息 指令 描述 git --version 查看git版本 git status 查看本地仓库状态,比较常用的指 ...

  9. BI工具术语表大全:从字母A-Z全面收录

    谈到商业智能行业,变革是不可避免的.为了跟上步伐,各种各样的BI 解决方案正在快速迭代更新,以满足企业的数字化需求,那么市场上BI 工具种类繁杂,到底如何选择适合功能全面.满足自己企业运转情况的.合适 ...

  10. [EULAR文摘] TNFi治疗3年对384例强柱患者脊柱放射学进展的影响

    TNF拮抗剂治疗3年对384例强直性脊柱炎患者脊柱放射学进展的影响 Maksymowych WP, et al. EULAR 2015. Present ID: OP0144. 背景: 既往开放标签的 ...