- 最后登录
- 2019-12-25
- 注册时间
- 2012-8-24
- 阅读权限
- 90
- 积分
- 71088
- 纳金币
- 52336
- 精华
- 343
|
布尔凯索的分享- /// <summary>
- /// 矩形攻击
- /// 判断npc是否在player的攻击距离内
- /// </summary>
- /// <param name="player">player</param>
- /// <param name="npc">npc</param>
- /// <param name="width">攻击区域的宽</param>
- /// <param name="height">攻击区域的高</param>
- /// <returns></returns>
- public bool ReckAtc(Transform player,Transform npc,int width,int height)
- {
- Vector3 deltaVect = npc.position - player.position;
- //点乘得到是否在前方,如果大于0,就是在前方。
- //同时的到的也是npc位于player前方的相对位置。
- float aDotForward = Vector3.Dot(deltaVect, player.forward);
- //npc位于player前方的相对位置<height,代表在攻击距离内
- if (aDotForward > 0&&aDotForward<height)
- {
- float aDotRight = Vector3.Dot(deltaVect, player.right);
- if (Mathf.Abs(aDotRight) < width)
- {
- return true;
- }
- }
- return false;
- }
- -----------------------------------------------------------------
- /// <summary>
- /// 判断是否在三型区域伞形区域
- /// </summary>
- /// <param name="player"></param>
- /// <param name="npc"></param>
- /// <param name="angle">给定的角度,不能超过这个角度的一半</param>
- /// <param name="radius">给定的伞形半径</param>
- /// <returns></returns>
- public bool UmbrellaAtc(Transform player,Transform npc,float angle,int radius)
- {
- //player指向npc的向量
- Vector3 deltaVect = npc.position - player.position;
- //拿到两个向量间的夹角
- float tmpAngle = Vector3.Angle(deltaVect,player.forward);
- //拿到a向量在forward的膜
- float aDotForward = Vector3.Dot(deltaVect, player.forward);
- //判断如果两个向量间的夹角小于给定角度的一般并且a向量的膜小于伞形的半径return true否则false
- if (tmpAngle < (angle / 2) && aDotForward < radius)
- {
- return true;
- }
- return false;
- }
复制代码 |
|