- 最后登录
- 2019-12-25
- 注册时间
- 2012-8-24
- 阅读权限
- 90
- 积分
- 71088
 
- 纳金币
- 52360
- 精华
- 343
|
來自: XX88
一:扇形攻击范围检测- using UnityEngine;
- using System.Collections;
- public class AttackCHeck : MonoBehaviour
- {
- //要攻击的目标
- public Transform Target;
- //扇形距离 攻击距离 扇形的半径
- private float SkillDistance = 5;
- //扇形的角度 也就是攻击的角度
- private float SkillJiaodu = 60;
- private void Update()
- {
- //与敌人的距离
- float distance = Vector3.Distance(transform.position, Target.position);
- //玩家正前方的向量
- Vector3 norVec = transform.rotation * Vector3.forward;
- //玩家与敌人的方向向量
- Vector3 temVec = Target.position - transform.position;
- //求两个向量的夹角
- float jiajiao = Mathf.Acos(Vector3.Dot(norVec.normalized, temVec.normalized)) * Mathf.Rad2Deg;
- if (distance < SkillDistance)
- {
- if (jiajiao <= SkillJiaodu * 0.5f)
- {
- Debug.Log("在扇形范围内");
- }
- }
- }
- }
复制代码 二:长方形范围攻击检测- using UnityEngine;
- using System.Collections;
- public class AttackCHeck : MonoBehaviour
- {
- //要攻击的目标
- public Transform Target;
- private void Update()
- {
- //计算玩家与敌人的距离
- float distance = Vector3.Distance(transform.position, Target.position);
- //玩家与敌人的方向向量
- Vector3 temVec = Target.position - transform.position;
- //与玩家正前方做点积
- float forwardDistance = Vector3.Dot(temVec, transform.forward.normalized);
- if (forwardDistance > 0 && forwardDistance <= 10)
- {
- float rightDistance = Vector3.Dot(temVec, transform.right.normalized);
- if (Mathf.Abs(rightDistance) <= 3)
- {
- Debug.Log("进入攻击范围");
- }
- }
- }
- }
复制代码 三:半圆形攻击范围检测- using UnityEngine;
- using System.Collections;
- public class AttackCHeck : MonoBehaviour
- {
- //要攻击的目标
- public Transform Target;
- private void Update()
- {
- //计算玩家与敌人的距离
- float distance = Vector3.Distance(transform.position, Target.position);
- //玩家与敌人的方向向量
- Vector3 temVec = Target.position - transform.position;
- //与玩家正前方做点积
- float forwardDistance = Vector3.Dot(temVec, transform.forward.normalized);
- if (forwardDistance > 0 && forwardDistance <= 10)
- {
- if (distance <= 5)
- {
- Debug.Log("进入攻击范围");
- }
- }
- }
- }
复制代码 |
|