纳金网

标题: Unity3D 攻击范围检测 [打印本页]

作者: may    时间: 2018-12-31 21:28
标题: Unity3D 攻击范围检测

來自: 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. }
复制代码

作者: 745951224    时间: 2019-1-2 10:19
使用投影计算向量分解。看不懂的童鞋可以百度下点乘的几何意义




欢迎光临 纳金网 (http://go.narkii.com/club/) Powered by Discuz! X2.5