前言

在大型游戏中在Unity使用物理引擎是十分消耗性能的,特别是在移动端设备中,如果过多的使用物理引擎来进行行为判断,对设备性能消耗是很厉害的,一般情况我们在Unity游戏开发中,会通过算法来进行技能伤害判断,一个较为常见的伤害判断——通过矩形范围敌判断敌人是否在攻击范围之内。

Unity物理引擎的底层实现原理

在2D游戏中,物理引擎判断是否在攻击范围原理是AABB包围盒,

一个2D矩形,中心点到矩形包围边缘最长的距离是对角线, 两个中心点的位置相减获取相对距离L,并与两个中心点到举行包围盒的对角线距离相加,获取最长相交距离a,获取最短相交距离b,通过判断距离向量来确定是否技能范围命中敌人。

在3D游戏中,物理引擎的的判断原理是八象限包围盒,在2DAABB包围盒的基础上进行延伸,


也是通过判断相交最长与相交最短距离来检测是否发生碰撞,如果场景中有多个物体,先判断是否在同处于两个象限再检测碰撞距离。

如果一旦游戏场景中的物理引擎使用过多, 对性能的使用是很严重的,所以在游戏中我们会尽量减少对于物理引擎的使用。

如何通过算法进行矩形攻击范围的检测

主要运用的是点乘的方法:

点乘的特点 
在向量u,向量v非零的前提下,点积如果为负,则u,v形成的角大于90度; 
如果为零,那么u,v垂直; 
如果为正,那么u,v形成的角小于90度。


按照我们的分析,代码如下:

    /// <summary>/// 矩形攻击范围/// </summary>/// <param name="attacker">攻击方</param>/// <param name="attacked">被攻击方</param>/// <param name="forwardDistance">矩形前方距离</param>/// <param name="rightDistance">矩形宽度/2</param>/// <returns></returns>public bool RectAttackJudge( Transform  attacker , Transform  attacked ,float forwardDistance ,float rightDistance){Vector3 deltaA = attacked.position - attacker.position;float   forwardDotA= Vector3.Dot(attacker.forward, deltaA);if (forwardDotA > 0 && forwardDotA <= forwardDistance){if (Mathf.Abs(Vector3.Dot(attacker.right, deltaA)) < rightDistance){return true;}}return false;}

Unity算法——矩形技能伤害判断相关推荐

  1. Unity算法——扇形和圆形技能伤害判断

    扇形攻击范围 /// <summary>/// 伞形攻击范围/// </summary>/// <param name="attacker">攻 ...

  2. 游戏开发中的数学问题:技能伤害的区域检测(方形,圆形,三角形,扇形)

    众所周知,moba中的每个英雄都有一套自己的技能的攻击范围方式,有如廉颇一样的圆形范围,有火舞一样的直线范围,吕布的扇形方天戟范围,还有牛魔大招时的矩形范围等等 一些技能是通过物理的碰撞检测来判断的, ...

  3. 游戏思考系列02:技能伤害计算流程(不涉及buff)

    文章目录 一.题外话: 1)技能伤害和特效表现的分离 二.流程(举例:逻辑和业务分开:技能可以分为四个阶段) `举例`:LOL日炎灼烧效果,每0.5s产生一次伤害 1)客户端开始施法,技能前摇.此时通 ...

  4. 人族机器人叉兵_星际争霸兵种体积和伤害判断:叉叉小体积为什么运输机占2单位?...

    星际争霸这个游戏有个十分有趣的设定,就是有些兵种的伤害体积和运输体积不一样,相信很多人也见过这种情况. 比如一个人族运输机可以装载4个机器人,从运输体积来看应该是中型单位,但是它被虫族地堡攻击一下是4 ...

  5. C语言与算法设计技能培训

    C 语言与算法设计技能培训 1 .用C语言实现下列各种排序:冒泡排序.选择排序.快速排序冒泡排序函数如下: /*n表示待排序的数据的个数*/ #define n 10 void maopao(int ...

  6. 诛仙服务器 修改技能伤害,鬼道迎来重大修改 技能改动分析+全新加点推荐一并奉上!...

    本攻略由[幻月府]诡夜制作 不代表官方观点 请以实际游戏为准 一.技能改动分析 1.[鬼灯引魂] 原本效果:深度昏睡时间1秒. 改动:深度昏睡时间改为2秒,其他效果不变. 分析:这次改动控制效果增强, ...

  7. [Unity算法]平抛运动

    [Unity算法]平抛运动 平抛运动: 1.物体以一定的初速度水平方向抛出,如果物体仅受重力作用,这样的运动叫做平抛运动. 2.平抛运动可看作水平方向的匀速直线运动以及竖直方向的自由落体运动的合运动. ...

  8. unity算法面试_Unity面试经验

    工作经验快满三年了,从学校实习开始到目前为止只经历过一次找工作的经验.这次出来找工作还是有点感触的.下面是我对上家公司工作的一个反思和本次找工作的经历的一个简短总结. 1.在前一家公司的时候什么活都干 ...

  9. Unity UGUI 血条 伤害数字 优化

    血条: 游戏开发中,血条位置会因为角色位置改变而频繁进行刷新.这个过程会耗费比较多的性能,下面提出一些小的优化. 1:血条缓存,这个是最基本的,不能因为血条出现一次重建一次,太费了. 2:降低更新频率 ...

最新文章

  1. C#调用非托管C++DLL:直接调用法
  2. Ubuntu 修改mysql的存储目录
  3. C语言 比较字符串的大小关系
  4. matlab符号表达式的化简
  5. 集成云技术的Zoomla!逐浪CMS5.0研发全面启动
  6. android.support不统一的问题
  7. python的作者为什么要创造python_为什么要学习Python?老男孩Python开发
  8. 基于主特征空间相似度计算的切分算法及切分框架
  9. 如何在Github上找到“最受欢迎的存储库”? [关闭]
  10. 关于asp.net页面缓存
  11. excel筛选排序从小到大_Excel按颜色排序或筛选
  12. C语言编程魔法书--基于C11标准(陈铁)
  13. stm32 /*入门1~100步要点全记录
  14. SpringBoot多模块项目如何扫描全局mapper接口和mapper.xml文件
  15. 高校三维地图校内导航系统解决方案
  16. python爬取王者皮肤_Python爬虫入门(1):手把手教你获取王者荣耀全皮肤高清壁纸...
  17. Blender软件介绍与使用心得
  18. 为什么更多APP开发者选择穿山甲作为游戏变现平台?
  19. 蓝色巨人IBM(International Business Machines)
  20. html 百度天气,百度天气预报api

热门文章

  1. 显示技术之器件---LED、Mini LED、Micro LED、OLED、LCD、SMD、SMT
  2. 电脑连接紫米蓝牙耳机音质差解决
  3. 计算机无法开机是键盘的问题,电脑维修:电脑键盘损坏导致不能使用及无法正常开机...
  4. 天猫国际与天猫有什么区别不同吗
  5. 计算机毕业设计JAVA共享单车系统mybatis+源码+调试部署+系统+数据库+lw
  6. 会语音打字的鼠标,还能搞定翻译和搜索,咪鼠S5B智能语音鼠标体验
  7. 【华为机试真题 JAVA】绘图机器-100
  8. 使用 K3d 在 Docker 中运行 Kubernetes 集群
  9. Google Earth Engine(GEE)——GEE自带的归一化指数计算工具介绍
  10. 特征提取(二)Hessian矩阵