UE4中物理材质可以让游戏中的对象识别出材质的不同从而做出不同响应,如子弹打在不同材质上播放不同特效,人物走在不同陆面上发出不同的脚步声等等。
首先需要在工程设置中找到Engine->Physice滚动到PhysicalSurface:
可以看到SurfaceType就是我们可以添加的材质类型 这我添加了两个。
重启引擎后,就可以新建PhysicalMaterial:
之后打开找到PhysicalProperties就可以找到我们之前设置的材质类型:
随后我们可以在“材质”“模型”“碰撞体”中都可以找到并设置:
胶囊体也可以:
来到C++中,可以在接收到Hit事件后得到碰撞到的物理材质(这里我用了射线检测):
FCollisionQueryParams TraceParams;
TraceParams.bTraceComplex = true;
TraceParams.bReturnPhysicalMaterial = true; //确保PhysicalMaterial开启
FHitResult Hit;
if (GetWorld()->LineTraceSingleByChannel(Hit, EyeLocation, TraceEnd, COLLISION_WEAPON, TraceParams))
{
EPhysicalSurface SurfaceType = UPhysicalMaterial::DetermineSurfaceType(Hit.PhysMaterial.Get());
}
随后可以使用SurfaceType来switch其中Type1和Type2即是我们之前在项目设置中定义的类型(这里在case中做什么就是你自己决定的了):
UParticleSystem * ImpactParticle = nullptr;
switch (SurfaceType)
{
case SurfaceType_Default:
ImpactParticle = DefaultImpactEffect;
break;
case SurfaceType1: //击中肉体
ImpactParticle = ImpactParticleArray.IsValidIndex(0) ? ImpactParticleArray[0] : nullptr;
break;
case SurfaceType2: //击中头部
ImpactParticle = ImpactParticleArray.IsValidIndex(1) ? ImpactParticleArray[1] : nullptr;
break;
case SurfaceType3:
break;
default:
ImpactParticle = DefaultImpactEffect;
break;
}
编写完毕后就可以看到碰撞不同材质时响应你想要的效果了: