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();

lastPos = GameController._instance.lastPlayerPostion;

navMeshAgent = GetComponent();

}

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

{

//主角在敌人的视野之内

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

{

wayPoints[i + 1] = path.corners[i];

}

float length = 0;

for (inti = 1; 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_小功能实现(敌人追踪主角)相关推荐

  1. unity检测范围内敌人_Unity实现视野范围外死亡敌人的分数显示在屏幕内

    using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test01 : ...

  2. APP内打电话的小功能

    // 前提 <uses-permission android:name="android.permission.CALL_PHONE" /> // 点击事件 Strin ...

  3. 在unity中内置一个查询物流信息功能

    项目需求,在unity中内置查询物流信息的功能 需要用到查询物流 的API 在这选择的是快递100的API 首先需要申请快递100的API,官方会给你一个KEY,使用该KEY,就可以进行物流查询了 u ...

  4. Unity3D小功能 小技巧 小教程 小原理(持续更新...)

    Unity3D小功能 小技巧 小教程 小原理(持续更新...) 1.Unity的.NET版本是2.0 按道理来说,C#能用的功能Unity也能用,但是Unity的.NET却不是最新版 要是用一些别的D ...

  5. Unity技能工厂——字体替换工具功能的实现!

    在平常我们做任何项目的时候,工具类对于我们来说是必不可少的组成部分,因为工具类可以解决实际问题或者是优化我们已经实现的功能. 当你在做项目的时候,搭建完场景后,前场景中你所创建的UI组件中的Text的 ...

  6. Unity 2D横版通关 小游戏——幻城探险 C#

    Unity 2D横版通关 小游戏 C#  分辨率 1920*1980 点击这里下载项目工程 本项目,为个人练习demo,美术资源原创自合作美工. 本项目涉及到的功能: 1.UI:开始游戏按钮,游戏帮助 ...

  7. Unity优化方面的一些小总结

    前言: 我做了3年的Unity了,但是却没有深入优化模块的内容,只能怪自己做项目的时候做的内容太杂乱了.去面试的时候被面试官问道优化方面的内容的时候自己一脸懵逼.本来有机会去MK的,让自己错失了. 所 ...

  8. Unity iOS内购

    前言:最近项目需要切换到iOS平台做一些提交审核和支付对接相关的工作,上一篇刚分享了最新的iOS10提交审核的一些坑,这篇分享一些内购相关的流程. Unity iOS内购 思路: Unity调用iOS ...

  9. iOS 生成带 logo 的二维码,区域截屏保存至相册(小功能二连发 (一))

    原文链接:http://www.jianshu.com/p/36e9f012ef39 生成带 logo 的二维码 区域截屏相关 -- 由3033分享 开篇 最近项目需要搞了几个相对独立的小功能,今天有 ...

  10. android 隐藏图标_苹果手机竟然还有这么多隐藏小功能(一)

        关注上方蓝字,获取更多精彩内容! 苹果手机清内存.一秒置顶.密码保险箱.图标隐身.....想不到的,没发现的,这里帮你全部整理好,赶快来嗨下吧!1.苹果手机 清内存 相对于以前内存比较小安卓手 ...

最新文章

  1. keras 的 example 文件 mnist_acgan.py 解析
  2. MSSQL 2012 拒绝了对对象 'extended_properties' (数据库 'mssqlsystemresource',架构 'sys')的 SELECT 权限...
  3. Coursera在线学习---第十节.大规模机器学习(Large Scale Machine Learning)
  4. 网站编程手册 服务器端,Peergine-P2P服务器端开发手册-v1.3.doc
  5. 平衡不完全区组设计 数据分析的SAS实践
  6. Spring.ImportSelector接口
  7. 【转】spring之任务调度
  8. LeetCode 916. 单词子集(计数)
  9. 手把手教你用python实现决策树的策略规则挖掘
  10. python创建虚拟环境报错typeerror_python 创建虚拟环境时报错OSError, setuptools下载失败...
  11. CentOS6.9+Hadoop2.7.3+Hive1.2.1+Hbase1.3.1+Spark2.1.1
  12. 磊科全功能路由器上网行为管理配置指南 -- 路由器
  13. Android广告平台
  14. 201421410013 唐昭靖 作业1
  15. 2022年京东618活动规则:618满减规则为299减50
  16. App测试流程及测试点(个人整理版)-转
  17. 运行 skimage 报错ImportError: DLL load failed:找不到指定模块
  18. 异常信息:test02FlexController”不存在,wufa
  19. MapReduce的容错机制
  20. 160809310袁韬淳

热门文章

  1. LabVIEW编程技巧:手把手教你实现基于状态机的程序框架架构
  2. 服务器u单核性能排行,CPU单核性能排行[2018年10月更新]
  3. 我的VSTO之路(三):Word基本知识
  4. 关于开会了一点点想法
  5. python 进行文本情感分析
  6. 在本地电脑运行vue-element-admin
  7. Vscode latex插件生成pdf目录空白问题
  8. 【学堂在线】自然辩证法习题解析(西北工业大学)
  9. macOS:实现 声音内录 不用其它App
  10. 英飞凌XC2000系列单片机FLASH加解密策略