Unity3D实现攻击范围检测

本文实例为大家分享了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|) 等于 夹角

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Unity实现攻击范围检测并绘制检测区域

    本文实例为大家分享了Unity实现攻击范围检测并绘制检测区域的具体代码,供大家参考,具体内容如下 一.圆形检测 using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// 圆形检测,并绘制出运行的攻击范围 /// </summary> public class CircleDetect : MonoBehaviour { GameObject go;

  • Unity3D实现攻击范围检测

    本文实例为大家分享了Unity3D实现攻击范围检测的具体代码,供大家参考,具体内容如下 一.扇形攻击范围检测 using UnityEngine; using System.Collections; public class AttackCHeck : MonoBehaviour { //要攻击的目标 public Transform Target; //扇形距离 攻击距离 扇形的半径 private float SkillDistance = 5; //扇形的角度 也就是攻击的角度 priva

  • 黑客避开检测的手段

    黑客的聪明并不只是在于他们知道如何去入侵服务器,还在于他们知道如何去伪装自己的攻击.恶意的攻击者会使用多种逃避的手段来让自己不会被检测到,所以作为系统管理员,也应当了解这些手段以应付可能发生的攻击. 这篇文章的主要目的不是揭示黑客新的攻击手法,而是对那些黑客所用到的逃避检测的手法以及他们可能留下的证据做描述.这些手段的欺骗性很大,所以想检测到它们也更加的困难. 网络服务器 我们的实验环境使用两种最常用的网络服务器,Apache和微软的Internet Information Server(I

  • 如何突破各种防火墙的防护

    现在随着人们的安全意识加强,防火墙一般都被公司企业采用来保障网络的安全,一般的攻击者在有防火墙的情况下,一般是很难入侵的.下面谈谈有防火墙环境下的攻击和检测. 一 防火墙基本原理 首先,我们需要了解一些基本的防火墙实现原理.防火墙目前主要分包过滤,和状态检测的包过滤,应用层代理防火墙.但是他们的基本实现都是类似的. │ │---路由器-----网卡│防火墙│网卡│----------内部网络│ │ 防火墙一般有两个以上的网络卡,一个连到外部(router),另一个是连到内部网络.当打开主机网络转

  • Shell脚本实现非法IP登陆自动报警

    服务器的安全稳定是每个运维都希望达到的目标,毕竟网站一旦流量大了,访问高了,就会有一些无聊人来攻击,帮忙检测漏洞是好,但纯ddos的性质就很恶劣了.说远了,这篇文章只是检测有非法ip登录到服务器上就自动给运维报警,当然也可以改成短信报警,前提是你有短信网关. 复制代码 代码如下: #!/bin/bash #该脚本作用是检测是否有恶意IP登陆服务器并邮件报警 #可以结合139邮箱以达到短信及时通知到手机的功能 #适用系统centos5   Ldate=`which date` Lawk=`whic

  • 黑客突破防火墙常用的几种技术

    一.防火墙基本原理 首先,我们需要了解一些基本的防火墙实现原理.防火墙目前主要分包过滤,和状态检测的包过滤,应用层代理防火墙.但是他们的基本实现都是类似的. │ │---路由器-----网卡│防火墙│网卡│----------内部网络│ │ 防火墙一般有两个以上的网络卡,一个连到外部(router),另一个是连到内部网络.当打开主机网络转发功能时,两个网卡间的网络通讯能直接通过.当有防火墙时,他好比插在网卡之间,对所有的网络通讯进行控制. 说到访问控制,这是防火墙的核心了:),防火墙主要通过一个

  • 黑客突破防火墙几种惯用手法

    首先,我们需要了解一些基本的防火墙实现原理.防火墙目前主要分包过滤,和状态检测的包过滤,应用层代理防火墙.但是他们的基本实现都是类似的. │ │---路由器-----网卡│防火墙│网卡│----------内部网络│ │ 防火墙一般有两个以上的网络卡,一个连到外部(router),另一个是连到内部网络.当打开主机网络转发功能时,两个网卡间的网络通讯能直接通过.当有防火墙时,他好比插在网卡之间,对所有的网络通讯进行控制. 说到访问控制,这是防火墙的核心了:),防火墙主要通过一个访问控制表来判断的,

  • Linux下的网络监听技术之一

    前言:在网络中,当信息进行传播的时候,可以利用工具,将网络接口设置在监听的模式,便可将网络中正在传播的信息截获或者捕获到,从而进行攻击.网络监听在网络中的任何一个位置模式下都可实施进行.而黑客一般都是利用网络监听来截取用户口令.比如当有人占领了一台主机之后,那么他要再想将战果扩大到这个主机所在的整个局域网话,监听往往是他们选择的捷径.很多时候我在各类安全论坛上看到一些初学的爱好者,在他们认为如果占领了某主机之后那么想进入 它的内部网应该是很简单的.其实非也,进入了某主机再想转入它的内部网络里的其

  • Linux下的网络监听技术之二

    相应的数据结构: struct arphdr { unsigned short int ar_hrd; unsigned short int ar_pro; unsigned char ar_hln; unsigned char ar_pln; unsigned short int ar_op; #if 0 unsigned char _ar_sha[ETH_ALEN]; unsigned char _ar_sip[4]; unsigned char _ar_tha[ETH_ALEN]; uns

  • SQL注入语义分析库libinjection简介

    目录 SQL注入语义分析库libinjection 什么是libinjection libinjection和正则表达式 modsecurity 如何使用libinjection ModSecurity只用了libinjection防御sql注入吗? WAF研发领域,语义分析相对于正则表达式先进性的研究 参考文献 SQL注入语义分析库libinjection 什么是libinjection libinjection是一款用于防御SQL注入攻击的开源软件库.它是由C语言编写的,可以嵌入到任何Web

随机推荐