Unity3D实现攻击范围检测

作者:BattleTiger 时间:2023-07-02 12:12:39 

本文实例为大家分享了Unity3D实现攻击范围检测的具体代码,供大家参考,具体内容如下

一、扇形攻击范围检测


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("进入攻击范围");
  }
 }
}
}

暂时就写三种吧!目前就遇到三种,以后遇到再更新.接下来介绍一下算法的核心知识点吧

其实这些小算法基本上用的全是向量的计算,向量的计算有两种

1.向量的点乘

–>A . B = |A| * |B| * cos θ
–>点乘应用

1).如果 让 A 等于单位向量 |A| ==1 c点积 等于 B 在 A 上的投影
2).如果 让 A B等于单位向量 arccos(a.b) == 夹角

2.向量的叉乘

–>A* B = C C就是A和B的法向量
–>叉乘应用

1).c 是有方向 。 通过 左手 定则 可以知道 C 的方向
2).所以叉乘一般是用来计算方向的
3).A 和 B 都是单位向量 arcsin(|A*B|) 等于 夹角

来源:https://blog.csdn.net/BattleTiger/article/details/77853675

标签:Unity3D,检测
0
投稿

猜你喜欢

  • Java求解二叉树的最近公共祖先实例代码

    2023-09-14 18:24:56
  • Android Flutter实现兴趣标签选择功能

    2021-07-05 14:29:17
  • c# webapi 配置swagger的方法

    2022-03-21 23:38:19
  • 基于静态Singleton模式的使用介绍

    2022-09-13 20:11:08
  • C#中const用法详解

    2021-08-12 15:30:29
  • C#实现根据指定容器和控件名字获得控件的方法

    2023-09-26 12:23:03
  • 21天学习android开发教程之SurfaceView与多线程的混搭

    2021-07-22 05:25:09
  • 利用java操作Excel文件的方法

    2021-12-13 03:03:49
  • Java实现经典游戏打砖块游戏的示例代码

    2021-06-25 13:30:16
  • 基于WPF实现绘制地铁路线图

    2023-09-08 13:23:12
  • C#多线程之线程池(ThreadPool)

    2022-05-02 07:12:15
  • Java实现简单班级管理系统

    2023-01-07 16:20:29
  • 全面解析Hibernate关联操作、查询操作、高级特性、并发处理机制

    2021-06-25 08:48:48
  • 开源一个c# 新的雪花算法

    2022-01-20 16:08:56
  • Spring+Vue整合UEditor富文本实现图片附件上传的方法

    2022-09-27 10:36:13
  • Java多线程yield心得分享

    2023-11-29 05:58:15
  • JAVA发送http get/post请求,调用http接口、方法详解

    2021-11-02 16:41:19
  • Java class文件格式之特殊字符串_动力节点Java学院整理

    2022-02-11 14:45:59
  • MyBatis中PageHelper不生效的解决方案

    2022-10-23 11:46:47
  • Springboot+ElementUi实现评论、回复、点赞功能

    2022-06-16 04:34:00
  • asp之家 软件编程 m.aspxhome.com