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

[其他] Unity3D 攻击范围检测

[复制链接]
may    

8830

主题

81

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
52360
精华
343

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

跳转到指定楼层
楼主
发表于 2018-12-31 21:28:45 |只看该作者 |倒序浏览

來自: XX88

一:扇形攻击范围检测
  1. using UnityEngine;
  2. using System.Collections;


  3. public class AttackCHeck : MonoBehaviour
  4. {
  5.     //要攻击的目标
  6.     public Transform Target;
  7.     //扇形距离 攻击距离  扇形的半径
  8.     private float SkillDistance = 5;
  9.     //扇形的角度 也就是攻击的角度
  10.     private float SkillJiaodu = 60;

  11.     private void Update()
  12.     {
  13.         //与敌人的距离
  14.         float distance = Vector3.Distance(transform.position, Target.position);
  15.         //玩家正前方的向量
  16.         Vector3 norVec = transform.rotation * Vector3.forward;
  17.         //玩家与敌人的方向向量
  18.         Vector3 temVec = Target.position - transform.position;
  19.         //求两个向量的夹角
  20.         float jiajiao = Mathf.Acos(Vector3.Dot(norVec.normalized, temVec.normalized)) * Mathf.Rad2Deg;
  21.         if (distance < SkillDistance)
  22.         {
  23.             if (jiajiao <= SkillJiaodu * 0.5f)
  24.             {
  25.                 Debug.Log("在扇形范围内");
  26.             }
  27.         }
  28.     }
  29. }
复制代码
二:长方形范围攻击检测
  1. using UnityEngine;
  2. using System.Collections;


  3. public class AttackCHeck : MonoBehaviour
  4. {
  5.     //要攻击的目标
  6.     public Transform Target;

  7.     private void Update()
  8.     {
  9.         //计算玩家与敌人的距离
  10.         float distance = Vector3.Distance(transform.position, Target.position);
  11.         //玩家与敌人的方向向量
  12.         Vector3 temVec = Target.position - transform.position;
  13.         //与玩家正前方做点积
  14.         float forwardDistance = Vector3.Dot(temVec, transform.forward.normalized);
  15.         if (forwardDistance > 0 && forwardDistance <= 10)
  16.         {
  17.             float rightDistance = Vector3.Dot(temVec, transform.right.normalized);

  18.             if (Mathf.Abs(rightDistance) <= 3)
  19.             {
  20.                 Debug.Log("进入攻击范围");
  21.             }
  22.         }

  23.     }
  24. }
复制代码
三:半圆形攻击范围检测
  1. using UnityEngine;
  2. using System.Collections;


  3. public class AttackCHeck : MonoBehaviour
  4. {
  5.     //要攻击的目标
  6.     public Transform Target;
  7.     private void Update()
  8.     {
  9.         //计算玩家与敌人的距离
  10.         float distance = Vector3.Distance(transform.position, Target.position);
  11.         //玩家与敌人的方向向量
  12.         Vector3 temVec = Target.position - transform.position;
  13.         //与玩家正前方做点积
  14.         float forwardDistance = Vector3.Dot(temVec, transform.forward.normalized);
  15.         if (forwardDistance > 0 && forwardDistance <= 10)
  16.         {
  17.             if (distance <= 5)
  18.             {
  19.                 Debug.Log("进入攻击范围");
  20.             }
  21.         }
  22.     }
  23. }
复制代码
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

5

主题

7

听众

2429

积分

中级设计师

Rank: 5Rank: 5

纳金币
149
精华
0

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

沙发
发表于 2019-1-2 10:19:33 |只看该作者
使用投影计算向量分解。看不懂的童鞋可以百度下点乘的几何意义
回复

使用道具 举报

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

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

GMT+8, 2025-6-22 01:16 , Processed in 0.072310 second(s), 27 queries .

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

© 2008-2019 Narkii Inc.

回顶部