UE4实用类PawnSensingComponent简介

原创 2015年11月21日 19:56:26

PawnSensingComponent是涉及AI编程时候的常用类,实现了很多强大的功能,对于AI感知帮助很大。(终于不用搞一个看不见的StaticMeshComponent来模拟视觉了(#--))
主要功能有
1.AI的视觉,是一个锥形感知体。
2.AI的听觉,主要与距离和声音大小有关,与遮挡物也有关。

首先介绍一下AI的视觉方面吧,PawnSensingComponent的初始化很简单,在类内声明一个PawnSensingComponent字段,之后

this->sensingcomponent = CreateDefaultSubobject<PawnSensingComponent>(TEXT("your name"));
this->sensingcomponent->SetPeripheralVisionAngle(60);
this->sensingcomponent->SightRadius = 5000;
this->sensingcomponent->bSeePawns = true;
this->sensingcomponent->SensingInterval = 0.10;

初始化其他Component是一样的,注意要给bSeenPawn指认为true,不然没有视觉回调,其次就是视觉判定的刷新时间和锥形的大小了,这个因情况而异。
值得注意的是这个Component没有继承自USceneComponent,所以他不能AttachTo其他Component,也没有自己的物理意义,没有位置角度等信息,他是直接绑定在Actor的原点上的。

最后就是挂上和视觉有关的委托了:

this->sensingcomponent->OnSeePawn.AddDynamic(this, &AAICharacter::somemethod);

注意这里的AddDynamic是一个宏,不使用宏的话挂委托还是比较麻烦的。
之后每当锥形覆盖了Pawn,都会回调你的函数,之后你在经行处理就行了。

关于视觉还要说的一点就是PawnSensingComponent的CouldSeePawn和HasLineOfSightTo函数,这两个函数看名字可能觉得差不多,但是功能不太一样。总体来说:
1.CouldSeePawn仅仅简单地判断你给出的Pawn是否在锥形内。(这个考虑了锥形的覆盖,但是没有考虑遮蔽)
2.HasLineOfSightTo仅仅简单地判断你给出的Pawn是否内被这个PawnSensingComponent看见(这个又没有考虑锥形的覆盖,只考虑了遮挡)

可见真正要达到“看得见”这个目标,还是要同时进行CouldSeePawn和HasLineOfSightTo两个判断。实际上PawnSensingComponent内部判断是否能看见时,也是用的这两个,我们看看部分代码:

bool bHasSeenPawn = false;
    bool bHasFailedLineOfSightCheck = false;
    if (bSeePawns && ShouldCheckVisibilityOf(&Pawn))
    {
        if (CouldSeePawn(&Pawn, true))
        {
            if (HasLineOfSightTo(&Pawn))
            {
                BroadcastOnSeePawn(Pawn);
                bHasSeenPawn = true;
            }
            else
            {
                bHasFailedLineOfSightCheck = true;
            }
        }
    }

再来看看听觉方面:

this->sensingcomponent->bHearNoises = true;
this->sensingcomponent->HearingThreshold = 50;
this->sensingcomponent->LOSHearingThreshold = 60;
this->sensingcomponent->OnHearNoise.AddDynamic(this, &AAICharacter::dosomething);

首先要打开听觉捕捉bHearNoises,之后设置听觉阈值,最后挂上委托就行了。阈值的单位比较不直观,是发出单位1的响声之后,最大离多远能听见,比如这里就是50单位。
那么声音是怎么发出的呢?Actor类内部就有一个内建函数MakeNoise,参数都很好懂就不多说了。但是值得注意的是,你要MakeNoise的类一定要有一个UPawnNoiseEmitterComponent字段并且初始化过:

this->noiseemitter = CreateDefaultSubobject<UPawnNoiseEmitterComponent>("makenoise");

因为MakeNoise内部是使用了UPawnNoiseEmitterComponent这个对象来发声的。(比较奇怪的是,明明内建了MakeNoise函数,却不自带一个UPawnNoiseEmitterComponent字段,Epic应该有更深层次的考虑吧)

最后再提一点,就是PawnSensingComponent的一个字段bOnlySensePlayers ,默认是true,于是PawnSensingComponent只会看到和听到玩家,而不会看到或听到其他AI同类,如果想AI之间也有互动(比如AI开枪MakeNoise,其他AI会听到赶来)就要把这个字段设置为false:

this->sensingcomponent->bOnlySensePlayers = false;

这个地方卡了本屌N久,为啥我开枪有AI反应,AI开枪其他AI就没反应,原来还有这么一出。(内部似乎是通过判断声音发出者的Controller是否是Player来实现的)

版权声明:本文为博主原创文章,未经博主允许不得转载。

UE4蓝图笔记

UE4蓝图的一些要点,望大神们多多指教指教小弟
  • piger91
  • piger91
  • 2016年08月30日 16:49
  • 4266

UE4蓝图节点翻译---Add Pawn Sensing Component

翻译人:灵月散人 参考的引擎版本:4.17.2 节点名: Add Pawn Sensing Component 添加Pawn 感应组件 官网原文链接注解 Spawn a Pawn Sensin...
  • disheng151
  • disheng151
  • 2017年11月26日 12:40
  • 75

UE4蓝图节点翻译---Add Pawn Noise Emitter Component

翻译人:灵月散人 参考的引擎版本:4.17.2 节点名: Add Pawn Noise Emitter Component 官网原文链接注解 Spawn a Pawn Noise Emitter...
  • disheng151
  • disheng151
  • 2017年11月26日 12:10
  • 90

UE4 AI Perception 浅析

年纪老了,记忆力差,随手写点笔记,以后忘了再来翻翻。从用途说起吧,当一个AI需要侦察周围的是否有敌人或者队友什么的,就需要用到AIPerception了,通俗的说它可以决定这个AI的视力,听力等。首先...
  • shihaijiang1987
  • shihaijiang1987
  • 2018年01月02日 16:28
  • 122

【UE4】 第09讲 【MOBA制作日记】 隐藏默认创建的DefaultPawn

隐藏默认创建的DefaultPawn
  • Nanhu2012
  • Nanhu2012
  • 2017年03月04日 10:25
  • 700

Guru of the Week 条款03: 使用标准库

 GotW #03 Using the Standard Library (or, Temporaries Revisited)著者:Herb Sutter      翻译:kingofark[声明]...
  • kingofark
  • kingofark
  • 2001年10月23日 20:09
  • 1030

UE4 介绍

开始用ue4做项目查询资料发现国内的资料少的可怜,所以打算写一下ue4方面的知识和大家项目和交流,有不正确的 ,希望大家多多指教...
  • SbLiangXianSheng
  • SbLiangXianSheng
  • 2016年06月03日 18:40
  • 459

Java实用类汇总

Java类汇总
  • treasure_zhou
  • treasure_zhou
  • 2016年03月07日 09:39
  • 476

UE4之AI追玩家( 1 )

效果图: 首先我们找到我们的第三人称人物 复制一份,作为我们的AI 打开我们新创建的AI蓝图 删除掉事件图表里的所有蓝图节点 和组件里的CameraBoom和FollowCamera ...
  • qq_36409711
  • qq_36409711
  • 2017年06月16日 11:16
  • 544

UE4蓝图节点整理(是不特别全)

VR生词表 variable 变量 Asset 资产 VR中创建new asset trigger 触发 details 细节 Editable 可编...
  • LingHunJiuJiu
  • LingHunJiuJiu
  • 2017年12月18日 08:24
  • 444
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UE4实用类PawnSensingComponent简介
举报原因:
原因补充:

(最多只允许输入30个字)