Physical material get surface type

  1. EObjectTypeQuery Player = UEngineTypes::ConvertToObjectType(ECC_Player);
  2. EObjectTypeQuery Pawn = UEngineTypes::ConvertToObjectType(ECC_Pawn);
  3.  
  4. //objectType to trace.
  5. TArray<TEnumAsByte<EObjectTypeQuery>> ObjectQueryParams;
  6. ObjectQueryParams.Push(Player);
  7. ObjectQueryParams.Push(Pawn);
  8.  
  9. FCollisionQueryParams QueryParams("Detection", false, this);
  10. QueryParams.bTraceAsyncScene = true;
  11. QueryParams.bReturnPhysicalMaterial = true;
  12. bool bIsHit = GetWorld()->LineTraceMultiByObjectType(hitResults,
  13. GetActorLocation(),
  14. GetActorLocation() + GetActorForwardVector() * 10000,
  15. FCollisionObjectQueryParams(),
  16. QueryParams
  17. );
  18. if (bIsHit)
  19. {
  20. for (FHitResult Hit : hitResults)
  21. {
  22. UPhysicalMaterial* PhysicsMtl = Hit.PhysMaterial.Get();
  23. if (PhysicsMtl->SurfaceType == SurfaceType_Default)
  24. {
  25. FString NameOfHitedObject = Hit.GetActor()->GetName();
  26. if (GEngine)
  27. {
  28. GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, "I see a Normal: " + NameOfHitedObject);
  29. }
  30. }
  31. if (PhysicsMtl->SurfaceType == SURFACE_FANCY)
  32. {
  33. FString NameOfHitedObject = Hit.GetActor()->GetName();
  34. if (GEngine)
  35. {
  36. GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, "I see a FANCY: " + NameOfHitedObject);
  37. }
  38. }else if (PhysicsMtl->SurfaceType == SURFACE_UGLY)
  39. {
  40. FString NameOfHitedObject = Hit.GetActor()->GetName();
  41. if (GEngine)
  42. {
  43. GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, "I see a FANCY: " + NameOfHitedObject);
  44. }
  45. }
  46.  
  47. }
  48. }

댓글

이 블로그의 인기 게시물

About AActor!!! "UObject" has no member "BeginPlay"

UNREAL Android build information

Shader informations nice blog ~ ~