Unity AI 感知侦探
游戏中AI的感知用的最多的是看到或者听到,也就是:
1.视觉感知
2.听觉感知
视觉感知:
视觉感知一般会有一个视野范围,这个范围与角色的朝向有关,只有在视觉范围内角色才有可能感知得到,这个范围与一个扇形接近,可以直接用半径和角度来控制。
潜在目标除了需要在视视觉范围内之外,探索者的视线还不能被其他障碍物遮挡,这里可以用射线来检测——发出一条从探索者到潜在目标的射线,如果目标是这条射线撞到的第一个单位,则该单位可以被看到,否则被忽略。
- using System.Collections.Generic;
- using UnityEngine;
- public class AIViewPerception : MonoBehaviour
- {
- //视野半径
- public float radius=10f;
- //视野的角度范围
- public float angel=120f;
- //侦察的结果
- public List<GameObject> PerceptionResult { get; private set; }
- /// <summary>
- /// 进行一次侦察
- /// </summary>
- /// <param name="explorer">探索者</param>
- /// <param name="targets">潜在目标集</param>
- public void Check(GameObject explorer,List<GameObject> targets)
- {
- PerceptionResult.Clear();
- foreach(var item in targets)
- {
- //距离判断,这里用平方减少系统开根号的计算量
- Vector3 offset = item.transform.position - explorer.transform.position;
- if (offset.sqrMagnitude > radius*radius)
- continue;
- //角度判断,是否在视线范围内
- float angel = Vector3.Angle(explorer.transform.forward, offset.normalized);
- if (angel > this.angel * 1.0f / )
- continue;
- //射线判断,是否被其它目标或障碍物阻挡
- Ray ray = new Ray(explorer.transform.position, offset);
- RaycastHit info;
- if (Physics.Raycast(ray,out info,radius))
- {
- if (info.collider.gameObject == item)
- {
- PerceptionResult.Add(item);
- }
- }
- }
- }
- void Start()
- {
- //测试
- PerceptionResult = new List<GameObject>();
- var targets =new List<GameObject>(GameObject.FindGameObjectsWithTag("Target"));
- Check(gameObject, targets);
- foreach(var result in PerceptionResult)
- {
- Debug.Log(result.name);
- }
- }
听觉感知:
听觉感知不像视觉感知那样跟朝向有关,也没有一个角度范围,但听觉感知一般与声源的距离有关;距离越远声音越小,在距离相对较远的地方由于接收到的音量逐渐变小,更好的处理方式是根据距离的远近有感知丢失的可能性。
这里采用两个听力半径作为区分,一个是安全听力半径,一个是最大听力半径,在安全听力半径内一定能感知到声源,但超过安全半径后,直到最大听力范围,感知到声源的概率呈现线性降低,直到最大听力范围处为0。
- using System.Collections.Generic;
- using UnityEngine;
- public class AIListenPerception : MonoBehaviour
- {
- //最大听力半径
- public float maxRadius = 10f;
- //安全听力半径
- public float safeRadius = 5f;
- //侦听结果
- public Dictionary<AudioSource,float> PerceptionResult { get; private set; }
- /// <summary>
- /// 进行一次侦听
- /// </summary>
- /// <param name="explorer">探索者</param>
- /// <param name="targets">声源目标集</param>
- public void Check(GameObject explorer, List<AudioSource> targets)
- {
- PerceptionResult.Clear();
- foreach(var item in targets)
- {
- //最大听力范围判断
- Vector3 offset = item.transform.position - explorer.transform.position;
- if (offset.sqrMagnitude > maxRadius * maxRadius)
- continue;
- //侦听丢失的概率判断:计算出一个声源距离比例权重,距离越远,权重越大,侦听丢失的概率越大
- float distance = offset.magnitude;
- float weight = (distance - safeRadius) * 1.0f / (maxRadius - safeRadius);
- if (Random.value < weight)
- continue;
- //计算真实的侦听到音量,与距离成反比
- float volume = item.volume *(- distance / maxRadius);
- PerceptionResult.Add(item, volume);
- }
- }
- private void Start()
- {
- //测试
- PerceptionResult = new Dictionary<AudioSource, float>();
- var targets = new List<GameObject>(GameObject.FindGameObjectsWithTag("Target"));
- List<AudioSource> audioSources = new List<AudioSource>();
- foreach(var item in targets)
- {
- audioSources.Add(item.GetComponent<AudioSource>());
- }
- Check(gameObject, audioSources);
- foreach (var result in PerceptionResult)
- {
- Debug.Log("audioSource : " + result.Key.gameObject.name);
- Debug.Log("volume : "+ result.Value);
- }
- }
Unity AI 感知侦探的更多相关文章
- [UE4]AIPerception,AI感知
- AI Conference 2018人工智能大会 参会总结
主 题:AI Conference 2018人工智能大会 时 间:2018.04.11-4.13 地 点:北京国际饭店会议中心 发起人:O'Reilly 和 Intel 参与部门:研发设计部 参会人员 ...
- 全球顶尖的内容创作引擎,Unity为创造而生
5月11日晚,Unite Beijing 2018 Keynote主题演讲于国家会议中心圆满落幕.今年的Keynote主题演讲汇聚了12位重量级嘉宾,为参会者呈现出了一场属于Unity 2018的技术 ...
- AI的真实感
目录 1.让AI"不完美"--估算和假设 2 AI感知 全能感知 特定感觉无知 3 AI的个性 4 AI的预判 5 AI的智能等级 AI的真实感一直是游戏AI程序员追求的目标, ...
- Unreal Engine 4 系列教程 Part 9:AI教程
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
- UE4蓝图AI角色制作(四)之Gameplay调试器
8. 寻路网格体和Gameplay调试器 为了及时识别出AI系统中的导航问题,UE4提供了一个工具用来解决这类问题,它叫Gameplay调试器.打开项目设置,在左侧找到"引擎",然 ...
- 人工智能AI------有限状态机、分层状态机、行为树
https://www.cnblogs.com/zhanlang96/p/4793511.html 人工智能遵循着:感知->思考->行动决策方法:有限状态机(Finite-State Ma ...
- Unite Beijing 2018 参会简要分享
一. Training Day 主讲人:鲍建运 操作:马瑞 课程包括较为完整的功能,如灯光设置,角色动画控制,Cinemachine,Timeline,AI寻路,以及最新的Post Processin ...
- Unite Shanghai 2019全日程曝光(建议收藏)
https://mp.weixin.qq.com/s/KvAyXpDhqWROtTX1Ol3a4Q 5月10-12日,Unite Shanghai 2019即将在上海国际会议中心正式开幕.本次大会共设 ...
随机推荐
- 关于字符串的格式化----format与%
格式化字符串一般有两种方法 1.%(d整数,s字符,f浮点数) 2.format 用处极为广泛且限制不多 注意:第一种对于数组的传递会报TypeError,所以必须传递数组 a = (1, 2, 3) ...
- 《软件安装》VMware Workstation 不注册 下载
问答环节 问:为什么要下载安装VMware Workstation 答:VMware Workstation 可以安装虚拟机,我们可以把我们安装的一些软件装在虚拟机上面,防止自己的电脑卡顿(软件装多了 ...
- Office2019新增哪些功能
上一篇文章我们知道了office为什么没有2017/2018版本,那个是因为微软office是时隔三年一更新的软件,这不office2019就出来了.一款软件,只有不断的完善自身功能,进行不断的更新, ...
- 31.Java基础_日期/日期格式/日历类
Date类 Date对象构造方法 Date对象常用方法 import java.util.*; public class test { public static void main(String[] ...
- C++ std::forward_list 基本用法
#include <iostream> #include <string> #include <forward_list> using namespace std; ...
- BOM的初级理解
1.什么是BOM,BOm有什么作用? BOM和DOM.ES是JavaScript的重要三个组成部分: 其中BOM是专门操作浏览器的API,其实他就是一种兼容性问题,这其中问题比较大就是IE浏览器,谁叫 ...
- 在 Linux 下学习 C 语言有什么好处?
作者:宅学部落链接:https://www.zhihu.com/question/23893390/answer/832610610来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
- C# 管道通信 (client —— server)Framework2.0版本也可用
//管道服务类public class PipServer { [DllImport("kernel32.dll", SetLastError = true)] public st ...
- .NET Core C# 中级篇2-7 文件操作
.NET Core CSharp 中级篇2-7 本节内容为文件操作 简介 文件操作在我们C#里还是比较常见的,例如我们读取Excel.Txt文件的内容,在程序中,这些文件都是以流的方式读取进入我们内存 ...
- Java集合专题
1.Java 中常用的容器有哪些? 常见容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表. Collectio ...