游戏中AI的感知用的最多的是看到或者听到,也就是:

1.视觉感知

2.听觉感知

视觉感知:

视觉感知一般会有一个视野范围,这个范围与角色的朝向有关,只有在视觉范围内角色才有可能感知得到,这个范围与一个扇形接近,可以直接用半径和角度来控制。

潜在目标除了需要在视视觉范围内之外,探索者的视线还不能被其他障碍物遮挡,这里可以用射线来检测——发出一条从探索者到潜在目标的射线,如果目标是这条射线撞到的第一个单位,则该单位可以被看到,否则被忽略。

  1. using System.Collections.Generic;
  2. using UnityEngine;
  3.  
  4. public class AIViewPerception : MonoBehaviour
  5. {
  6. //视野半径
  7. public float radius=10f;
  8. //视野的角度范围
  9. public float angel=120f;
  10.  
  11. //侦察的结果
  12. public List<GameObject> PerceptionResult { get; private set; }
  13.  
  14. /// <summary>
  15. /// 进行一次侦察
  16. /// </summary>
  17. /// <param name="explorer">探索者</param>
  18. /// <param name="targets">潜在目标集</param>
  19. public void Check(GameObject explorer,List<GameObject> targets)
  20. {
  21. PerceptionResult.Clear();
  22.  
  23. foreach(var item in targets)
  24. {
  25. //距离判断,这里用平方减少系统开根号的计算量
  26. Vector3 offset = item.transform.position - explorer.transform.position;
  27. if (offset.sqrMagnitude > radius*radius)
  28. continue;
  29.  
  30. //角度判断,是否在视线范围内
  31. float angel = Vector3.Angle(explorer.transform.forward, offset.normalized);
  32. if (angel > this.angel * 1.0f / )
  33. continue;
  34.  
  35. //射线判断,是否被其它目标或障碍物阻挡
  36. Ray ray = new Ray(explorer.transform.position, offset);
  37. RaycastHit info;
  38. if (Physics.Raycast(ray,out info,radius))
  39. {
  40. if (info.collider.gameObject == item)
  41. {
  42. PerceptionResult.Add(item);
  43. }
  44. }
  45. }
  46. }
  47.  
  48. void Start()
  49. {
  50. //测试
  51. PerceptionResult = new List<GameObject>();
  52. var targets =new List<GameObject>(GameObject.FindGameObjectsWithTag("Target"));
  53. Check(gameObject, targets);
  54. foreach(var result in PerceptionResult)
  55. {
  56. Debug.Log(result.name);
  57. }
  58. }

听觉感知:

听觉感知不像视觉感知那样跟朝向有关,也没有一个角度范围,但听觉感知一般与声源的距离有关;距离越远声音越小,在距离相对较远的地方由于接收到的音量逐渐变小,更好的处理方式是根据距离的远近有感知丢失的可能性。

这里采用两个听力半径作为区分,一个是安全听力半径,一个是最大听力半径,在安全听力半径内一定能感知到声源,但超过安全半径后,直到最大听力范围,感知到声源的概率呈现线性降低,直到最大听力范围处为0。

  1. using System.Collections.Generic;
  2. using UnityEngine;
  3.  
  4. public class AIListenPerception : MonoBehaviour
  5. {
  6. //最大听力半径
  7. public float maxRadius = 10f;
  8. //安全听力半径
  9. public float safeRadius = 5f;
  10.  
  11. //侦听结果
  12. public Dictionary<AudioSource,float> PerceptionResult { get; private set; }
  13.  
  14. /// <summary>
  15. /// 进行一次侦听
  16. /// </summary>
  17. /// <param name="explorer">探索者</param>
  18. /// <param name="targets">声源目标集</param>
  19. public void Check(GameObject explorer, List<AudioSource> targets)
  20. {
  21. PerceptionResult.Clear();
  22.  
  23. foreach(var item in targets)
  24. {
  25. //最大听力范围判断
  26. Vector3 offset = item.transform.position - explorer.transform.position;
  27. if (offset.sqrMagnitude > maxRadius * maxRadius)
  28. continue;
  29.  
  30. //侦听丢失的概率判断:计算出一个声源距离比例权重,距离越远,权重越大,侦听丢失的概率越大
  31. float distance = offset.magnitude;
  32. float weight = (distance - safeRadius) * 1.0f / (maxRadius - safeRadius);
  33. if (Random.value < weight)
  34. continue;
  35.  
  36. //计算真实的侦听到音量,与距离成反比
  37. float volume = item.volume *(- distance / maxRadius);
  38. PerceptionResult.Add(item, volume);
  39. }
  40. }
  41.  
  42. private void Start()
  43. {
  44. //测试
  45. PerceptionResult = new Dictionary<AudioSource, float>();
  46. var targets = new List<GameObject>(GameObject.FindGameObjectsWithTag("Target"));
  47. List<AudioSource> audioSources = new List<AudioSource>();
  48. foreach(var item in targets)
  49. {
  50. audioSources.Add(item.GetComponent<AudioSource>());
  51. }
  52. Check(gameObject, audioSources);
  53. foreach (var result in PerceptionResult)
  54. {
  55. Debug.Log("audioSource : " + result.Key.gameObject.name);
  56. Debug.Log("volume : "+ result.Value);
  57. }
  58. }

Unity AI 感知侦探的更多相关文章

  1. [UE4]AIPerception,AI感知

  2. AI Conference 2018人工智能大会 参会总结

    主 题:AI Conference 2018人工智能大会 时 间:2018.04.11-4.13 地 点:北京国际饭店会议中心 发起人:O'Reilly 和 Intel 参与部门:研发设计部 参会人员 ...

  3. 全球顶尖的内容创作引擎,Unity为创造而生

    5月11日晚,Unite Beijing 2018 Keynote主题演讲于国家会议中心圆满落幕.今年的Keynote主题演讲汇聚了12位重量级嘉宾,为参会者呈现出了一场属于Unity 2018的技术 ...

  4. AI的真实感

    目录 1.让AI"不完美"--估算和假设 2 AI感知 全能感知 特定感觉无知 3 AI的个性 4 AI的预判 5 AI的智能等级 ​ AI的真实感一直是游戏AI程序员追求的目标, ...

  5. Unreal Engine 4 系列教程 Part 9:AI教程

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

  6. UE4蓝图AI角色制作(四)之Gameplay调试器

    8. 寻路网格体和Gameplay调试器 为了及时识别出AI系统中的导航问题,UE4提供了一个工具用来解决这类问题,它叫Gameplay调试器.打开项目设置,在左侧找到"引擎",然 ...

  7. 人工智能AI------有限状态机、分层状态机、行为树

    https://www.cnblogs.com/zhanlang96/p/4793511.html 人工智能遵循着:感知->思考->行动决策方法:有限状态机(Finite-State Ma ...

  8. Unite Beijing 2018 参会简要分享

    一. Training Day 主讲人:鲍建运 操作:马瑞 课程包括较为完整的功能,如灯光设置,角色动画控制,Cinemachine,Timeline,AI寻路,以及最新的Post Processin ...

  9. Unite Shanghai 2019全日程曝光(建议收藏)

    https://mp.weixin.qq.com/s/KvAyXpDhqWROtTX1Ol3a4Q 5月10-12日,Unite Shanghai 2019即将在上海国际会议中心正式开幕.本次大会共设 ...

随机推荐

  1. 对Windows桌面应用程序进行UI自动化测试

    题记:本文简述如何利用appium对Windows桌面应用程序进行UI自动化测试. 所谓UI自动化测试,就是模拟一个用户,对应用程序的UI进行操作,以完成特定场景的功能性集成测试. 要对Windows ...

  2. OpenGL 之 Compute Shader(通用计算并行加速)

    平常我们使用的Shader有顶点着色器.几何着色器.片段着色器,这几个都是为光栅化图形渲染服务的,OpenGL 4.3之后新出了一个Compute Shader,用于通用计算并行加速,现在对其进行介绍 ...

  3. 《Web Development with Go》Mangodb插入struct数据

    学习数据持久化. package main import ( "fmt" "log" "time" "gopkg.in/mgo.v ...

  4. C++ std::array 基本用法

    #include <iostream> #include <string> #include <array> using namespace std; // htt ...

  5. [译]Vulkan教程(23)暂存buffer

    [译]Vulkan教程(23)暂存buffer Staging buffer 暂存buffer Introduction 入门 The vertex buffer we have right now ...

  6. 测试:Oracle 19c RAC添加私网

    最近有个客户需求是在某12.2版本的RAC环境上添加心跳网络,顺便考虑将之前的心跳网络改为asm专用.我目前只有19c的RAC的测试环境(19c是12c的最终稳定版本),直接测试验证下过程备忘. 1. ...

  7. 我来告诉你:VS2019开发ASP.NET Core 3.0 Web项目,修改视图后,刷新浏览器看不到修改后的效果怎么处理

    VisualStudio2019下一个2.2另一个3.0页面修改如下,但是3.0刷新没有任何变化,难道VS以后不能做前端开发了?大家可能没有看官方文档 根据文章所说你需要: 1.安装 Microsof ...

  8. PostgreSQL 表字段起别名

    使用Postgreq Sql 表字段起别名时注意要用双引号,使用单引号会出现语法错误,执行结果如图

  9. 【转载】Android Context 到底是什么?

    什么是Context? 一个Context意味着一个场景,一个场景就是我们和软件进行交互的一个过程.比如当你使用微信的时候,场景包括聊天界面.通讯录.朋友圈,以及背后的一些数据. 那么从程序的角度来看 ...

  10. 地图SDK全新版本v4.3.0上线 - 新增多项功能及优化

    以下内容转载自腾讯位置服务公众号的文章<地图SDK全新版本v4.3.0上线 - 新增多项功能及优化!> 作者:腾讯位置服务 链接:https://mp.weixin.qq.com/s/hb ...