前言

在大型游戏中在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. Linux系统编程之进程与线程控制原语对比
  2. 2020年高等数学方法与提高(上海理工大学)学习笔记:常微分方程
  3. mysql 触发器 分行_mysql 触发器
  4. gossip 区块链_源代码: 一个最小化的区块链系统
  5. python 求连线相似度_Python分析《都挺好》中的人物关系,苏大强与蔡根花是真爱?...
  6. [MEGA DEAL] Ultimate SQL Bootcamp认证捆绑包(98%)
  7. 您将在下一个项目中使用JSF吗?
  8. 为什么我喜欢Java的细节
  9. 面试精讲之面试考点及大厂真题 - 分布式专栏 05 公司使用什么RPC框架,聊聊你理解的RPC原理
  10. centos7 卸载安装失败的mysql7
  11. 使用js生成条形码以及二维码
  12. 64位centos下QQ无法输入中文只能输入英文
  13. 计算机专业专转本题目(新考纲)
  14. 社会网络分析能干什么?
  15. Problem : 美丽黄山II
  16. 3rd TMA大数据营销案例征集赛正式启动,报名ing!
  17. 虚幻——动画蓝图、状态机制作人物走跑跳动作
  18. 【解决】长虹电视连接不上WiFi
  19. Windows 下安装 Xdebug 受难记之(1)
  20. 使用无人机进行视频直播

热门文章

  1. 惨遭 openssl 不同版本毒打的一天
  2. substring的常用两个方法
  3. Java中的substring()方法
  4. 使用weibo js,新浪微博三方登陆,帐号绑定。
  5. 彻底删除Navicat
  6. 财付通php接口,财付通支付接口完整源码实例php版
  7. 威洛特:带你解读 猫咪为什么总有一些奇怪行为?
  8. Java起名规则与建议
  9. CentOS命令行时区及时间同步
  10. Volcano火山:容器与批量计算的碰撞