服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - Unity3D实现攻击范围检测

Unity3D实现攻击范围检测

2022-09-05 14:39BattleTiger C#

这篇文章主要为大家详细介绍了Unity3D实现攻击范围检测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

一、扇形攻击范围检测

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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("在扇形范围内");
   }
  }
 }
}

二、长方形范围攻击检测

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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("进入攻击范围");
   }
  }
 
 }
}

三、半圆形攻击范围检测

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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

延伸 · 阅读

精彩推荐
  • C#C# WindowsForm程序同时启动多个窗口类

    C# WindowsForm程序同时启动多个窗口类

    这篇文章主要为大家详细介绍了C# WindowsForm程序同时启动多个窗口类,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一...

    菜鸟葫芦娃7422022-01-07
  • C#C# API中模型与它们的接口设计详解

    C# API中模型与它们的接口设计详解

    这篇文章主要给大家介绍了关于C# API中模型与它们的接口设计的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或工作具有一定的参考学习价...

    无明6662022-02-24
  • C#C#利用VS中插件打包并发布winfrom程序

    C#利用VS中插件打包并发布winfrom程序

    这篇文章主要为大家详细介绍了C#利用VS中插件打包并发布winfrom程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一...

    饮墨3442022-02-28
  • C#C# DataTable使用方法详解

    C# DataTable使用方法详解

    这篇文章主要为大家详细介绍了C# DataTable的使用方法,感兴趣的小伙伴们可以参考一下...

    C#教程网6002021-11-14
  • C#C#通过属性名称获取(读取)属性值的方法

    C#通过属性名称获取(读取)属性值的方法

    本文主要介绍了C#通过属性名称获取(读取)属性值的方法,并提供了简化版代码,具有很好的参考价值,需要的朋友可以看下...

    弎吩锺熱℃5882021-12-14
  • C#C# 快速高效率复制对象(表达式树)

    C# 快速高效率复制对象(表达式树)

    在代码中经常会遇到需要把对象复制一遍,或者把属性名相同的值复制一遍。本文将对其解决方法进行详细介绍。下面跟着小编一起来看下吧...

    Emrys58812021-12-30
  • C#简单实现C#窗体程序判断是否闰年

    简单实现C#窗体程序判断是否闰年

    这篇文章主要介绍了简单实现C#窗体程序判断是否闰年的相关代码,禁止窗体调整大小,关闭窗体前的判断,感兴趣的小伙伴们可以参考一下...

    yongh7018722021-11-30
  • C#C#圆角窗体简单实现方法

    C#圆角窗体简单实现方法

    这篇文章主要介绍了C#圆角窗体简单实现方法,涉及C#窗体设置的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    我心依旧4222021-10-25