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;
}
編寫完畢後就可以看到碰撞不同材質時響應你想要的效果了: