Surfaceflags or something of that sort?

Take a look at the ShooterGame example, specifically Source/ShooterGame/Effects/ShooterImpactEffect.cpp. There you will see the game code has mapped some #defines in ShooterTypes.h to various values in the EPhysicalSurface enum. You can give these enums names (like ice) in Projects Settings under Engine > Physics > Physical Surfaces. Once you do that, you can create Physic Material Assets which you can assign these surface types to.

Engine/EngineTypes.h:



/** Types of surfaces in the game. */
UENUM(BlueprintType)
enum EPhysicalSurface
{
    SurfaceType_Default UMETA(DisplayName="Default"),
    SurfaceType1 UMETA(Hidden),
    SurfaceType2 UMETA(Hidden),
    SurfaceType3 UMETA(Hidden),
    ...


ShooterTypes.h



#define SHOOTER_SURFACE_Default        SurfaceType_Default
#define SHOOTER_SURFACE_Concrete    SurfaceType1
#define SHOOTER_SURFACE_Dirt        SurfaceType2
#define SHOOTER_SURFACE_Water        SurfaceType3
#define SHOOTER_SURFACE_Metal        SurfaceType4
#define SHOOTER_SURFACE_Wood        SurfaceType5
#define SHOOTER_SURFACE_Grass        SurfaceType6
#define SHOOTER_SURFACE_Glass        SurfaceType7
#define SHOOTER_SURFACE_Flesh        SurfaceType8


Looking up the surface type in ShooterImpactEffect.cpp:



void AShooterImpactEffect::PostInitializeComponents()
{
    Super::PostInitializeComponents();

    UPhysicalMaterial* HitPhysMat = SurfaceHit.PhysMaterial.Get();
    EPhysicalSurface HitSurfaceType = UPhysicalMaterial::DetermineSurfaceType(HitPhysMat);

    // show particles
    UParticleSystem* ImpactFX = GetImpactFX(HitSurfaceType);
    if (ImpactFX)
    {
        UGameplayStatics::SpawnEmitterAtLocation(this, ImpactFX, GetActorLocation(), GetActorRotation());
    }
    ...