unity_小功能实现(敌人追踪主角)
1、敌人发现主角有两种形式:
a、看见主角(主角出现在敌人的视野之内)
b、听见主角(听见主角走路声或者是跑步声)
a:看(see)
首先判断主角是否在敌人视野角度内,那么我们只需要判断B<0.5*A能不能成立

b:听(listen)

代码如下:
using UnityEngine;
using System.Collections;
using UnityEngine.AI;
public class EnemySight : MonoBehaviour {
private float seeAngle=120;//敌人视野角度
private bool isSeePlay = false;
private Vector3 lastPos;// 玩家的最后位置
private Vector3 alermPos=Vector3.zero; //警报位置
private Animator anim; //主角动画,作用是判断主角是否在运动
private SphereCollidersphereCollider;//敌人身上的碰撞器,该碰撞器是用来触发检测主角是否在敌人可见,可听范围内
private NavMeshAgentnavMeshAgent; //AI组件
void Awake()
{
anim =
GameObject.FindGameObjectWithTag(Tags.player).GetComponent<Animator>();
lastPos = GameController._instance.lastPlayerPostion;
navMeshAgent =
GetComponent<NavMeshAgent>();
}
void Update()
{
//同步主角位置
if (lastPos !=
GameController._instance.lastPlayerPostion)//触发警报后玩家位置改变
{
alermPos =
GameController._instance.lastPlayerPostion; //更新警报位置
lastPos =
GameController._instance.lastPlayerPostion;
}
}
void OnTriggleStay(Collider other)
{
if (other.tag==Tags.player)
{
//看玩家
Vector3 startDir
= transform.forward;//敌人开始朝向
Vector3
currDir = other.transform.position - transform.position; //敌人看向玩家的向量
float angle
= Vector3.Angle(startDir, currDir);//敌人开始朝向与看见玩家朝向的夹角
if (angle
<seeAngle * 0.5f) //视野角度一半以内可见
{
//主角在敌人的视野之内
isSeePlay = true;
alermPos = other.transform.position;//把玩家的位置设置为警报位置
GameController._instance.SeePlayer(other.transform);
}
else
{
isSeePlay = false;
}
//听脚步声音
if
(anim.GetCurrentAnimatorStateInfo(0).IsName("Locomotion"))//如果玩家在运动
{
NavMeshPath path = new NavMeshPath();
if (navMeshAgent.CalculatePath(other.transform.position, path))
{
Vector3[] wayPoints = new Vector3[path.corners.Length+2];
wayPoints[0] = transform.position;
wayPoints[wayPoints.Length - 1] = other.transform.position;
for (inti = 0; i<path.corners.Length; i++)
{
wayPoints[i + 1] = path.corners[i];
}
float length = 0;
for (inti = 1; i<wayPoints.Length; i++)
{
length += (wayPoints[i] - wayPoints[i - 1]).magnitude; //所有节点连接的折线的总长度
}
if (length <= sphereCollider.radius) //在听力范围内
{
alermPos = other.transform.position;
}
}
}
}
}
void OnTriggleExit(Collider other)
{
if (other.tag == Tags.player)
{
isSeePlay =
false;
}
}
unity_小功能实现(敌人追踪主角)的更多相关文章
- unity_小功能实现(敌人巡逻功能)
利用NavMeshAgent控制敌人巡逻,即敌人在一组位置间循环巡逻. 首先我们要知道NavMeshAgent中有两个方法:1.锁定当前巡逻的某一目标位置,即navMeshAgent.destinat ...
- unity_小功能实现(碰撞检测)
1.触发器Trigger:勾选IsTrigger属性 //当player刚进入触发区域的时刻发生触发检测,比如在靠近门的某个区域门一直处于开着状态 void OnTriggerEnter(Collid ...
- unity_小功能实现(客户端相互通信功能)
服务器端:在VS中新建项目,用于服务器的搭建 using System;using System.Collections.Generic; using System.Net.Sockets;u ...
- 自制Unity小游戏TankHero-2D(1)制作主角坦克
自制Unity小游戏TankHero-2D(1)制作主角坦克 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的. ...
- js小功能整理
/** * 判断是否包含字符串某字符串 * @param {[type]} str [被检测的字符串] * @param {[type]} substr [检测是否含有的字符串] * @return ...
- iOS--知识综合应用成就时髦小功能点
iOS--知识综合应用成就时髦小功能点
- Java实现点击一个Jlabel增加一个Jlabel的小功能
当界面生成以后,自己想做一个点击一个Jlabel增加一个Jlabel,即类似于QQ的添加好友以后可以及时的加进一个好友.自己做了好久,发现不能及时刷新.在网上查了一下,然后自己研究了一小会.发现需要v ...
- Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据
用servlet实现一个注册的小功能 ,后台获取数据. 注册页面: 注册页面代码 : <!DOCTYPE html> <html> <head> <meta ...
- android 常用小功能(第二版)
经历过一段岁月,转眼2013的半年都过去了,第二版整理好的小功能,答应大家发布的,直到今日,终于和大家相见了,第二版没有第一版多,大家也可以去参考第一版的内容,希望大家使用愉快! 目录: 1.获取当前 ...
随机推荐
- C#学习书单
[入门] (1)<C#入门经典> (2)<牛腩新闻发布系统> [深入] (1)<CLR via C#(第4版)> (2)<深入理解C#(第3版)> [C ...
- Jquery第二次考核
1. 名词解释 实例对象:var p1=new Person(); p1就是实例对象 构造:function Person(){} 原型对象:在 JavaScript 中,每当定义一个对象(函数也是 ...
- 脱壳系列_0_FSG壳_详细版
---恢复内容开始--- 1 查看信息 使用ExeInfoPe查看此壳程序 可以看出是很老的FSG壳. 分析: Entry Point : 000000154,熟悉PE结构的知道,入口点(代码)揉进P ...
- C#async/await心得
结论: 异步方法的方法签名要加 async,否则就算返回 Task 也是普通方法. 调用异步方法,可以加 await 或不加 await,两者方式都是马上返回,不加 await 得到的是 Task 对 ...
- 简易数据分析 08 | Web Scraper 翻页——点击「更多按钮」翻页
这是简易数据分析系列的第 8 篇文章. 我们在Web Scraper 翻页--控制链接批量抓取数据一文中,介绍了控制网页链接批量抓取数据的办法. 但是你在预览一些网站时,会发现随着网页的下拉,你需要点 ...
- javaweb入门-----jsp概念
jsp是什么? JSP:Java Server Pages java服务器端页面 *可以理解为 一个特殊的页面,其中既可以直接定义html标签,又可以定义java代码 *用于简化书写 <% %& ...
- Docker系列开篇之Virtual Machine VS Container(一)
前言 本节开始我们正式进入Docker系列,网上关于Docker相关文章如数家珍,写博客至今,我也一直在朝着如何写出通俗易懂且不枯燥的文章这个目标前进,喃喃自语的同时也希望看到文章的童鞋能明白我在讲什 ...
- 学习Python的相关资料
Learning python the hardway Python Tip社区啄木鸟社区编程指南社区 Python基础教程MIT 计算机科学及其导论Harward:计算机科学CS50Crossin的 ...
- 【POJ - 2236】Wireless Network (并查集)
Wireless Network 这接翻译了 Descriptions 地震发生在东南亚.ACM(亚洲合作医疗团队)已经与膝上电脑建立了无线网络,但是一次意外的余震袭击,网络中的所有计算机都被打破了. ...
- react-native-gesture-handler报错
安装React Native第三方组件出现Task :react-native-gesture-handler:compileDebugJavaWithJavac FAILED报错,则使用jetifi ...