查看: 2015|回复: 1
打印 上一主题 下一主题

[其他] 矩形和扇形攻击的代码

[复制链接]
may    

8830

主题

81

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
52336
精华
343

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2019-12-24 19:52:38 |只看该作者 |倒序浏览
布尔凯索的分享
  1. /// <summary>
  2.     /// 矩形攻击
  3.     /// 判断npc是否在player的攻击距离内
  4.     /// </summary>
  5.     /// <param name="player">player</param>
  6.     /// <param name="npc">npc</param>
  7.     /// <param name="width">攻击区域的宽</param>
  8.     /// <param name="height">攻击区域的高</param>
  9.     /// <returns></returns>
  10.     public bool ReckAtc(Transform player,Transform npc,int width,int height)
  11.     {
  12.         Vector3 deltaVect = npc.position - player.position;
  13.         //点乘得到是否在前方,如果大于0,就是在前方。
  14.         //同时的到的也是npc位于player前方的相对位置。
  15.         float aDotForward = Vector3.Dot(deltaVect, player.forward);
  16.         //npc位于player前方的相对位置<height,代表在攻击距离内
  17.         if (aDotForward > 0&&aDotForward<height)
  18.         {
  19.             float aDotRight = Vector3.Dot(deltaVect, player.right);
  20.             if (Mathf.Abs(aDotRight) < width)
  21.             {
  22.                 return true;
  23.             }           
  24.         }
  25.         return false;
  26.     }
  27. -----------------------------------------------------------------
  28.     /// <summary>
  29.     /// 判断是否在三型区域伞形区域
  30.     /// </summary>
  31.     /// <param name="player"></param>
  32.     /// <param name="npc"></param>
  33.     /// <param name="angle">给定的角度,不能超过这个角度的一半</param>
  34.     /// <param name="radius">给定的伞形半径</param>
  35.     /// <returns></returns>
  36.     public bool UmbrellaAtc(Transform player,Transform npc,float angle,int radius)
  37.     {
  38.         //player指向npc的向量
  39.         Vector3 deltaVect = npc.position - player.position;
  40.         //拿到两个向量间的夹角
  41.         float tmpAngle = Vector3.Angle(deltaVect,player.forward);
  42.         //拿到a向量在forward的膜
  43.         float aDotForward = Vector3.Dot(deltaVect, player.forward);
  44.         //判断如果两个向量间的夹角小于给定角度的一般并且a向量的膜小于伞形的半径return true否则false
  45.         if (tmpAngle < (angle / 2) && aDotForward < radius)
  46.         {
  47.             return true;
  48.         }
  49.         return false;
  50.     }
复制代码
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

13

主题

8

听众

4583

积分

中级设计师

Rank: 5Rank: 5

纳金币
13
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2019-12-26 16:26:20 |只看该作者
谢谢分享,学习一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-30 11:30 , Processed in 0.084332 second(s), 27 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部