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