人物角色群体攻击判定二(叉乘来判断敌人的位置)
建议阅读: 判断敌人在玩家的某一个区域: http://www.cnblogs.com/plateFace/p/4716799.html
我们可以根据玩家和敌人的坐标, 进行叉乘来获取一个向量可以用它来判断敌人的位置, 敌人是否在攻击范围内. 下面我简单实现下对单体敌人是否攻击做判定
这种方式有一种重大的BUG, 假设我把敌人大小增加100倍, 很显然玩家已经在敌人的体内了. 我们是通过坐标来判断敌人是否可以攻击, 跟敌人的体积大小无关系. 所以攻击的距离是跟敌人体积的大小所决定的
代码的实现:
using UnityEngine; using System.Collections; using System.Collections.Generic;public class Player : MonoBehaviour {public float speed = 2;public GameObject enemy;public Dictionary<string,GameObject> enemyList = new Dictionary<string,GameObject>();public TextMesh text1;public TextMesh text2;//判断敌人是否可以攻击public void CanAttack(GameObject obj){Vector3 toOther = this.transform.position - obj.gameObject.transform.position;Vector3 chaCheng1 = Vector3.Cross(transform.forward, toOther);Vector3 chaCheng2 = Vector3.Cross(transform.right, toOther);//调试距离的代码text1.text = chaCheng1.ToString ();text2.text = chaCheng2.ToString ();//经过调试 前后距离是3 左右距离是2,//当敌人在左上或右上 并且 距离小于攻击距离, 就可以攻击if (chaCheng1.y > 0 && chaCheng2.y > 0) {Debug.Log("位置: 左上");if(Mathf.Abs(chaCheng2.y) <= 3 && Mathf.Abs(chaCheng1.y) <= 2){//打开头顶可攻击标示obj.gameObject.transform.FindChild ("T").gameObject.SetActive(true);}else{obj.gameObject.transform.FindChild ("T").gameObject.SetActive(false);}return;}if (chaCheng1.y < 0 && chaCheng2.y > 0){Debug.Log("位置: 右上");if(Mathf.Abs(chaCheng2.y) <= 3 && Mathf.Abs(chaCheng1.y) <= 2){obj.gameObject.transform.FindChild ("T").gameObject.SetActive(true);}else{obj.gameObject.transform.FindChild ("T").gameObject.SetActive(false);}return;}obj.gameObject.transform.FindChild ("T").gameObject.SetActive(false);if (chaCheng1.y > 0 && chaCheng2.y < 0){Debug.Log("位置: 左下");return;}if (chaCheng1.y < 0 && chaCheng2.y < 0){Debug.Log("位置: 右下");}} }
判断之后的效果图:(人物头顶的红色表示可以攻击)
转载于:https://www.cnblogs.com/plateFace/p/4718144.html
人物角色群体攻击判定二(叉乘来判断敌人的位置)相关推荐
- 人物角色群体攻击判定(一)
我们制作3D动作游戏的时候,常常主人公是一对多人进行攻击,或者敌人在角色前方一定范围内进行攻击. 我们怎么实现这种效果呢? 1. 使用触发器(多体攻击) 方便调试,可视化(推荐) 2. 运用点乘和叉乘 ...
- 【数据结构和算法笔记】用c和c++分别实现二叉搜索树
目录 二叉排序树(二叉搜索树)定义: 二叉排序树的性质: 二叉排序树的操作: c语言实现二叉排序树: C++实现二叉排序树: 二叉排序树(二叉搜索树)定义: 二叉排序树的性质: (1)二叉排序树 ...
- 【数据结构与算法拓展】二叉堆原理、实现与例题(C和java)
前言 数据结构,一门数据处理的艺术,精巧的结构在一个又一个算法下发挥着他们无与伦比的高效和精密之美,在为信息技术打下坚实地基的同时,也令无数开发者和探索者为之着迷. 也因如此,它作为博主大二上学期最重 ...
- 数据结构之什么是二叉堆?
文章目录 什么是二叉堆? 二叉堆的自我调整 插入节点 删除节点 构建二叉堆 最小二叉堆的实现 最小堆的构建 最小堆插入节点并上浮 最小堆删除节点并下沉 最小堆的完整代码实现 最后 什么是二叉堆? 二叉 ...
- 二叉搜索树判定方法(c++实现)
--- 欢迎指正--- 自己想到的方法是:使用 中序遍历数组或者链表,然后比较数组或者链表中的数据是否有序. CC150 提供了更棒的解法. 原文大致描述: //<方法1> //首先我们想 ...
- 判定一棵二叉树是否是二叉搜索树
问题 给定一棵二叉树,判定该二叉树是否是二叉搜索树(Binary Search Tree)? 解法1:暴力搜索 首先说明一下二叉树和二叉搜索树的区别.二叉树指这样的树结构,它的每个结点的孩子数目最多为 ...
- 数据结构学习记录(二)——折半查找二叉判定树的画法
以下给出我在学习中总结的一种比较简便的构造折半二叉判定树的思路以及方法: 思路分析: 在计算mid值时,使用的时mid=(low+high)/2 .这里由于mid为int类型,自动默认为向下取整,因 ...
- 数据结构之二叉搜索树/二叉查找数/有序二叉树/排序二叉树
概念~ 二叉查找树(英语:Binary Search Tree),也称二叉搜索树.有序二叉树(英语:ordered binary tree),排序二叉树(英语:sorted binary tree), ...
- PAT甲级1043 Is It a Binary Search Tree :[C++题解]判断二叉搜索树BST、给定前序序列和中序序列
文章目录 题目分析 题目链接 题目分析 二叉搜索树(BST):左子树小于根结点,右子树大于等于根结点. 二叉搜索树的中序遍历一定是有序序列.所谓中序遍历:先访问左子树,再访问根结点,最后访问右子树. ...
最新文章
- 从零开始一起学习SLAM | 为什么要用齐次坐标?
- CentOS 5.2 下安装tripwire2.3.1.2出错解决
- php获取表单信息的代码_php 表单数据的获取代码
- voxel 与 pixel
- php descryptoserviceprovider,在unity3D上对数据进行DES加密,在PHP服务器上进行解密的详细教程...
- Apache Kylin从入门到精通
- Android Retrofit框架请求复杂json数据
- 【英语学习】【医学】【解剖学】Atlas of Human Anatomy (6e) 的目录
- farm 二维树桩数组数很大,数组存不下,怎么搞?区间更新
- HDU 1754 I Hate It 线段树RMQ
- 大数据调度工具之Oozie
- QT 读取txt 文件
- android手机修改app名字,手机App名字图标随意改,藏羞羞东西再也不怕被发现了...
- linux下编写脚本文件 .sh
- 推荐 15个 React 图标库
- K-median 算法
- 手机网站点击手机号码直接拨号
- linux ppm转jpg_python将.ppm格式图片转换成.jpg格式文件的方法
- UEFI之PEI阶段
- 5Gwifi搜不到?一文搞懂怎么开电脑5GHz频段
热门文章
- Divide and conquer:Drying(POJ 3104)
- 简单小程序代码_小程序该如何运营
- 电池供电的电容麦_太阳能航空障碍灯供电机制设计
- 甘特图 知乎_如何使用 Excel 绘制甘特图?
- VS2017无法启动
- Lintcode--4(1)--A+B
- php队列失败是指什么,队列是什么意思
- AUTOSAR从入门到精通100讲(二十六)-AutoSar之微控制器抽象层MCAL
- Flink应用实战案例50篇(一)- Flink SQL 在京东的优化实战
- 推广的euclid_欧几里德(Euclid)贴近度评价法在人类进化上的应用