三角形攻击区域
来源:互联网 发布:域名备案被注销 编辑:程序博客网 时间:2024/06/05 14:11
前言就不铺垫了...
这个功能可以在很多地方用的到,而且一般面试的时候也会提到一些。
因为自己遇到过这样 的问题,并且 在当时做的时候很费劲,但是后来 做出来之后,又觉得简单的要死。
ok,进入正题。
先说思路。
1、计算角度。
2、计算与物体距离。
3、判断。
4、解决
第一步,计算角度
第一我们需要计算出角度。但是我们应该如何计算角度呢?
首先我们需要明确,计算角度需要有两条边。
第一条是我们自身物体上的Z轴方向的向量,
第二条是敌人的位置的向量。
自身Z轴的向量为transform.forward;
敌人方向的向量为(敌人.position-transform.position);
这里两个向量都得出后,我们需要利用Vector3的angle方法求出他们的夹角。
简单例子
public class example : MonoBehaviour {public Transform target;void Update() {Vector3 targetDir = target.position - transform.position;Vector3 forward = transform.forward;float angle = Vector3.Angle(targetDir, forward);if (angle < 5.0F)print("close");}}
// prints "close" if the z-axis of this transform looks// almost towards the target//如果当前变换z轴接近目标小于5度的时候,打印"close"var target : Transform;function Update () {var targetDir = target.position - transform.position;var forward = transform.forward;var angle = Vector3.Angle(targetDir, forward);if (angle < 5.0)print("close");}
第二步,计算距离。
公式为num=(B.x-A.x)*(B.y-A.y)*(B.z-A.z)
得出两个值 之后就简单了,判断喽。
第三步,判断角度与距离。
第四步,就OK了。
这里上一下代码,代码中有注释,应该很好理解。
using UnityEngine;using System.Collections;public class Test009 : MonoBehaviour { public Transform T001; public Transform T002; public Transform enemy003; private Vector3 forward; private Vector3 V001; private Vector3 V002; private Vector3 E003; //基于自己Z轴与001的角度 private float M_001_angle; //基于自己Z轴与Enemy003的角度 private float M_E003_angle; //以下为记录长度距离 private float E_1;void Start () {}// Update is called once per framevoid Update () { //基于自己Z轴的向量 forward = transform.forward; //基于自己Z轴与T001的向量-----------角度 V001 = T001.position - transform.position; M_001_angle = Vector3.Angle(V001,forward); // print(M_001_angle);//----------------------------------------------------------- //基于自己Z轴与T002的向量-----------角度//----------------------------------------------------------- //基于自己Z轴与Enemy的向量--------------角度 E003 = enemy003.position - transform.position; M_E003_angle = Vector3.Angle(E003, forward); //print(M_E003_angle);//判断位置 Vector3 E11p = enemy003.transform.position; //(自己) 与E的距离 E_1 = (E11p.x - forward.x) * (E11p.x - forward.x) + (E11p.y - forward.y) * (E11p.y - forward.y) + (E11p.z - forward.z) * (E11p.z - forward.z); print(E_1); //判断角度 if (M_E003_angle <= 30) { if (E_1 <= 60) { print("进入角度,干他!!"); } } }}
0 0
- 三角形攻击区域
- 1112:三角形划分区域
- 三角形划分区域
- 三角形划分区域
- 三角形划分区域
- 求未被攻击的区域
- java控制台打印三角形区域
- hdu1249(三角形划分区域,直线划分区域,折线划分区域)
- 凸多边形区域划分为三角形问题
- 三角形划分平面区域【递归/递推】
- 角色技能攻击范围点区域显示
- MMO游戏技能攻击区域的计算
- C# 计算游戏技能攻击区域
- C# 计算游戏技能攻击区域
- hdu 1249 N个三角形把平面分成几个区域
- n个三角形最多可以构成多少个区域
- 【八中】三角形划分平面区域(tripar.cpp)
- C++递归递推算法之三角形划分平面区域
- FCKEditor上传图片时没响应与<pages theme="PCWebSkin">冲突
- 正则表达式入门
- 计算机网络(1)
- 两个登陆慢的问题与解决方法
- eclipse+maven3+jUnit4+spring如何测试的同时进行debug
- 三角形攻击区域
- Python写自动化之Ftp上传下载
- Zendstudio+Eclipse快捷键大全
- Space Golf (二分答案)
- Android笔记——ListView(列表视图)
- 学习OpenCV_例2.6 例2.7 进行放缩处理并在放缩后的图像中寻找边缘
- MySQL数据库常用操作
- RFID作业1-1
- HDU1285_拓扑排序