虚幻4 贴花

来源:互联网 发布:交换机上联端口配置 编辑:程序博客网 时间:2024/04/29 21:02
class UDecalComponent* CursorToWorld; // Create a decal in the world to show the cursor's location CursorToWorld = CreateDefaultSubobject<UDecalComponent>("CursorToWorld"); CursorToWorld->SetupAttachment(RootComponent); static ConstructorHelpers::FObjectFinder<UMaterial> DecalMaterialAsset(TEXT("Material'/Game/TopDownCPP/Blueprints/M_Cursor_Decal.M_Cursor_Decal'")); if (DecalMaterialAsset.Succeeded()) {  CursorToWorld->SetDecalMaterial(DecalMaterialAsset.Object); } CursorToWorld->DecalSize = FVector(16.0f, 32.0f, 32.0f); CursorToWorld->SetRelativeRotation(FRotator(90.0f, 0.0f, 0.0f).Quaternion());

根据引擎自带的topdown例子。

上面设置了贴花的材质,下面tick去更改贴花的位置

void ATestFireLightCharacter::Tick(float DeltaSeconds){if (CursorToWorld != nullptr){if (UHeadMountedDisplayFunctionLibrary::IsHeadMountedDisplayEnabled()){if (UWorld* World = GetWorld()){FHitResult HitResult;FCollisionQueryParams Params;FVector StartLocation = TopDownCameraComponent->GetComponentLocation();FVector EndLocation = TopDownCameraComponent->GetComponentRotation().Vector() * 2000.0f;Params.AddIgnoredActor(this);World->LineTraceSingleByChannel(HitResult, StartLocation, EndLocation, ECC_Visibility, Params);FQuat SurfaceRotation = HitResult.ImpactNormal.ToOrientationRotator().Quaternion();CursorToWorld->SetWorldLocationAndRotation(HitResult.Location, SurfaceRotation);}}else if (APlayerController* PC = Cast<APlayerController>(GetController())){FHitResult TraceHitResult;PC->GetHitResultUnderCursor(ECC_Visibility, true, TraceHitResult);FVector CursorFV = TraceHitResult.ImpactNormal;FRotator CursorR = CursorFV.Rotation();CursorToWorld->SetWorldLocation(TraceHitResult.Location);CursorToWorld->SetWorldRotation(CursorR);}}}


0 0
原创粉丝点击