Unity游戏开发中几种常用的攻击判定

编程入门 行业动态 更新时间:2024-10-09 23:12:30

Unity游戏开发中<a href=https://www.elefans.com/category/jswz/34/1769370.html style=几种常用的攻击判定"/>

Unity游戏开发中几种常用的攻击判定

众所周知,在Unity开发中我们避免不了要计算一些物体与物体之间的距离 亦或是 检测玩家发出的技能是否攻击到了我们需要攻击的目标 Unity 内部也提供给我们了一些非常简单的实用组件 Collider 包围盒 勾选包围盒身上的 isTigger则就变为一个触发器 与其相配合使用的组件就是 rigidbody 刚体组件 在Unity引擎中 两个物体如果想要去检测碰撞 触发 的必要条件就是 两个物体都要有Collider 并且至少其中一个物体的身上要具备 rigidBody 刚体组件 它们才可以使用Unity自带的回调API 但是往往简单易用的API 都会伴随着巨大的性能开销 虽然现在已经性能过剩了 但是 为了让我们可爱的游戏能在各种各样的机型上顺滑的跑起来 我们还是要节约一点 能不用rigidBody 刚体组件就不要用 模型的顶点片面数 能降就降

下面呢 是一些非常简单的常用的一些伤害范围判断 触类旁通可以解决并优化项目中的大量刚体组件 上代码~

扇形攻击

    /// <summary>/// 扇形/// </summary>/// <param name="player">玩家位置</param>/// <param name="target">敌人位置</param>/// <param name="angle">攻击角度</param>/// <param name="radius">攻击半径</param>/// <returns></returns>public bool UmbrellaAttact(Transform player,Transform target,float angle,float radius){//玩家指向敌人的方向向量Vector3 attackDir = target.position - player.position;//首先通过两个单位向量间的点乘Dot得到两个向量之间角度的余弦值//在通过Acos得到弧度//接下来通过弧度转角度Rad2Deg 的到两个向量之间的夹角//真正的夹角度数float realAngle = Mathf.Acos(Vector3.Dot(attackDir.normalized, player.forward)) * Mathf.Rad2Deg;//判断角度是否小于技能角度的一半//在使用向量的长度的平方来判断与半径平方的大小 使用平方运算比magnitude块很多 因为magnitude要使用勾股定理进行开方if(realAngle<angle*0.5f&&attackDir.sqrMagnitude< radius*radius){return true;}return false;}

圆形攻击

    /// <summary>/// 圆形/// </summary>/// <param name="player">玩家位置</param>/// <param name="target">目标位置</param>/// <param name="radius">攻击半径</param>/// <returns></returns>public bool CircleAttack(Transform player,Transform target,float radius){//得到玩家与被攻击物体的距离float distance = Vector3.Distance(player.position,target.position);if (distance < radius){//在半径范围内 return true;}return false;}

矩形攻击

 /// <summary>/// 矩形/// </summary>/// <param name="Player">玩家位置</param>/// <param name="target">目标位置</param>/// <param name="rectangleWide">矩形的宽度</param>/// <param name="rectangleHigh">矩形的高度</param>/// <returns></returns>public bool RectangleAttack(Transform Player, Transform target,float rectangleWide,float rectangleHigh){//得到玩家位置指向被攻击物体的方向向量Vector3 dirVector = target.position - Player.position;//与玩家位置正前方做点乘 得到投影float forwardDistance = Vector3.Dot(dirVector, Player.forward.normalized);if (forwardDistance>0&&forwardDistance<rectangleHigh){//此时在矩形的高度范围内//与玩家位置正右方标量继续做点乘得到投影float rightDistance = Vector3.Dot(dirVector, Player.right.normalized);//绝对值小于矩形的宽度的一半if (Mathf.Abs(rightDistance)<=rectangleWide*0.5f){return true;}return false;}return false;}

看完点个收藏呀 嘻嘻~

更多推荐

Unity游戏开发中几种常用的攻击判定

本文发布于:2024-02-13 22:43:49,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1760916.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:几种   游戏开发   常用   Unity

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!