判断目标是否在角色正前方一个扇形区域内,一般战斗系统中用作伤害处理
unity3d新手,在项目中用到过伤害的判断,就实现了先一个扇形伤害区域,大家共同分享下,希望能对刚接触unity3d的童鞋有所帮助,先上代码。
/// <summary>
/// 判断目标是否在主角面前一个扇形内
/// </summary>
/// <param name="player">角色</param>
/// <param name="target">目标</param>
/// <param name="radius">扇形半径</param>
/// <returns></returns>
public static bool IsInSector(GameObject player, GameObject target, float radius)
{
if (target != null && player != null)
{
Vector3 playerPos = player.transform.position;//角色自身坐标
Vector3 targetPos = target.transform.position;//目标坐标
Quaternion playerQua = player.transform.rotation;自身的旋转
Quaternion playerRight = playerQua * Quaternion.AngleAxis(30, Vector3.up);//以自身Y轴向右旋转30度
Quaternion playerLeft = playerQua * Quaternion.AngleAxis(30, Vector3.down);//以自身Y轴向左旋转30度
//角色以自身Y轴向右旋转30度角的正前方radius距离的坐标点
Vector3 right = playerPos + (playerRight * Vector3.forward) * radius;
Debug.DrawLine(playerPos, right, Color.red);
Vector3 forward = playerPos + (playerQua * Vector3.forward) * radius;//角色正前方Radius距离的坐标点
Debug.DrawLine(playerPos, forward, Color.red);
//角色以自身Y轴向左旋转30度角的正前方距离的坐标点
Vector3 left = playerPos + (playerLeft * Vector3.forward) * radius;radius
Debug.DrawLine(playerPos, left, Color.red);
//将自身本地坐标转化成世界3D坐标
Vector3 localToWorld = player.transform.TransformDirection(Vector3.forward);
//目标到角色的向量
Vector3 playerToTarget = target.transform.position - player.transform.position;
//向量点乘,大于0表示目标在角色正前方
if (Vector3.Dot(localToWorld, playerToTarget) > 0)
{
//目标点到left的向量
Vector3 targetToLeft = targetPos - left;
Debug.DrawLine(targetPos, left, Color.blue);
//目标点到right的向量
Vector3 targetToRight = targetPos - right;
Debug.DrawLine(targetPos, right, Color.blue);
//角色到left的向量
Vector3 playerToLeft = playerPos - left;
Debug.DrawLine(playerPos, left, Color.blue);
//角色到right的向量
Vector3 playerToRight = playerPos - right;
Debug.DrawLine(playerPos, right, Color.blue);
float dis = Vector3.Distance(playerPos, targetPos);
if (Vector3.Angle(targetToLeft, playerToLeft) < 90 && Vector3.Angle(targetToRight, playerToRight) < 90 && dis <= radius)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
return false;
}
运行结果如图下:
判断目标是否在角色正前方一个扇形区域内,一般战斗系统中用作伤害处理相关推荐
- java中,判断当前时间是否处于某个一个时间段内
今天同事拿了个问题问我,有一个回调工程,会一直查询今日订单表和回调表中的订单数据,然后这条sql今日订单日期是动态的, select * from QYPT_QUERY_GOODS goods,qyp ...
- 利用shell脚本批量判断目标ip存活情况
一.目的 有时候需要批量去判断目标ip是否存活,一个一个去试多麻烦所以写了个shell脚本去批量尝试,原理使用的是去ping目标ip,虽然这种方法受很多因素影响,比如网速,防火墙禁ping等,但是也是 ...
- java-记录一个子串在整串中出现的次数
转载 :https://blog.csdn.net/best_xing/article/details/70244858 任务描述: 编写一个程序,记录一个子串在整串中出现的次数,例如记录子串&qu ...
- 如何判断目标主机是否在监听一个UDP端口(阿里云二面)
面试官:我问一个简单的问题,如何判断目标主机是否在监听一个UDP端口port? 我:给目标主机发送一个UDP报文(含目标port),如果收到回复,表示监听,否则表示没有监听. 面试官:有没有通用一点的 ...
- python判断一个文件夹里面是否为空_Python碎片化学习教程 @8. 判断目标文件夹是否为空...
代码功能:判断目标文件夹是否为空 代码如下:import os # 导入负责处理操作系统相关事务的os模块 tar_dir = "D:\\666" # 指定目标文件夹 if l ...
- WordPress:如何判断登录用户的角色
过去判断登录用户的角色我喜欢用current_user_can(),比如判断当前用户是否是作者用current_user_can('author'),记得WordPress官方文档中给的例子也是这样用 ...
- 单词迷阵游戏就是从一个10x10的字母矩阵中找出目标单词,查找方向可以从左往右、从右往左、从上往下或者从下往上。例如下面的迷阵中包含quot等单词。
单词迷阵游戏就是从一个10x10的字母矩阵中找出目标单词,查找方向可以从左往右.从右往左.从上往下或者从下往上.例如下面的迷阵中包含quot等单词. rmhlzxceuq bxmichelle mnn ...
- unity3d:向量计算:获得两点连线的垂直向量,判断目标方位(前后左右)
获得两点连线垂直向量 /// <summary>/// 获取某向量的垂直向量/// </summary>public static Vector3 GetVerticalDir ...
- Vue3.0 使用 ref 判断目标 node 区域之外的点击事件(实现下拉框、弹窗关闭功能)
有时候会遇到点击目标区域绑定事件 / 展示效果,然后点击目标区域之外的地方就关闭效果 / 触发另一事件,为了实现这样的功能,我们需要通过比对 node 节点来进行判断,在下面我会使用 Vue3.0 的 ...
最新文章
- Java学习总结:7
- 认识HTML5的WebSocket 认识HTML5的WebSocket
- Hibernate Session的delete()方法
- 成功解决''g++' 不是内部或外部命令,也不是可运行的程序 或批处理文件
- Node.js HTTPS
- 获取系统信息3——proc文件系统介绍和使用
- 2.图像作为函数 | 裁剪、颜色通道、图像相加_5
- 环保公益PSD分层海报,小景合成美好世界
- codevs1197 Vigenère密码
- Windows版Mysql5.6.11的安装与配置
- 抽象工厂模式_设计模式(3) 抽象工厂模式
- 如何获取当前显示的片段?
- 刘海屏的MacBook Pro还值得入手吗?
- python数据结构与算法 pdf_数据结构与算法:Python语言描述.pdf
- 电脑开热点手机无法连接,无法启用 Internet 连接共享.为 LAN 连接配置的 IP 地址需要使用自动 IP 寻址.
- 移动数字化平台原来可以这样帮企业打造协同生态链
- 网站打不开如何解决?教你4个方法搞定它!
- Connection closed prematurely
- ANSYS WORKBENCH基础学习之应力奇异及位移结果对比
- 企业微信oauth认证_OAuth验证接口
热门文章
- zynq 黑金 linux 教程,【黑金ZYNQ7000系列原创视频教程】05.FPGA和ARM的初次结合——LED实验...
- 每日一练--世纪难题
- java解一元一次方程
- 编程经验NO.1 from月光博客
- Qt继承QWidget或者QWidget直接弹出窗口(非模态对话框)(对话框)
- 饿了么股权变更,创始人被架空,马云亲信上任!
- PDF如何翻译成中文?三种方法教你怎样翻译PDF上的文字
- 十级龙王间的决斗(C++)
- gulp 雪碧图制作
- 一种基于嵌入式的多重识别门禁系统设计方案