How to make function to change certain actor material ? I have actor class with main code like this:
ADresserBuilding::ADresserBuilding()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
Mesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Dresser_building"));
RootComponent = Mesh;
static ConstructorHelpers::FObjectFinder<UStaticMesh> MeshToUse(TEXT("StaticMesh'/Game/Models/Dresser.Dresser'"));
UStaticMesh* Asset = MeshToUse.Object;
Mesh->SetStaticMesh(Asset);
SetOpacityMaterial();
}
void ADresserBuilding::SetNormalMaterial()
{
static ConstructorHelpers::FObjectFinder<UMaterial> NormalMaterial(TEXT("Material'/Game/Models/eb_dresser_01.eb_dresser_01'"));
Mesh->SetMaterial(0, NormalMaterial.Object);
}
void ADresserBuilding::SetOpacityMaterial()
{
static ConstructorHelpers::FObjectFinder<UMaterial> OpacityMaterial(TEXT("Material'/Game/Models/eb_dresser_01.eb_dresser_01'"));
Mesh->SetMaterial(0, OpacityMaterial.Object);
}
And next one that tries to call function but it crush editor when I try like this.
AStrategy_PlayerController::AStrategy_PlayerController()
{
bShowMouseCursor = true;
DefaultMouseCursor = EMouseCursor::Crosshairs;
}
void AStrategy_PlayerController::BeginPlay()
{
Super::BeginPlay();
bActivateDresser = false;
HUDPtr = Cast<AStrategy_HUD>(GetHUD());
SpawnedActorsNumber = 0;
}
void AStrategy_PlayerController::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
if (bActivateDresser == true)
{
SpawnedActors[SpawnedActorsNumber]->SetActorLocation(GetMousePos(), false, 0, ETeleportType::None);
}
}
void AStrategy_PlayerController::SetupInputComponent()
{
Super::SetupInputComponent();
InputComponent->BindAction("LeftMouseClick", IE_Released, this, &AStrategy_PlayerController::SetBuilding);
InputComponent->BindAction("ActivateDres", IE_Pressed, this, &AStrategy_PlayerController::ActivateDresser);
}
void AStrategy_PlayerController::SetBuilding()
{
if (bActivateDresser == true)
{
SpawnedActors[SpawnedActorsNumber]->SetActorLocation(GetMousePos(), false, 0, ETeleportType::None);
SpawnedActors[SpawnedActorsNumber]->SetNormalMaterial(); **//this one cause problem**
SpawnedActorsNumber++;
bActivateDresser = false;
}
}
void AStrategy_PlayerController::ActivateDresser()
{
bActivateDresser = true;
FVector Location(0.0f, 0.0f, 0.0f);
FRotator Rotation(0.0f, 0.0f, 0.0f);
ADresserBuilding* NewActor = GetWorld()->SpawnActor<ADresserBuilding>(GetMousePos(), Rotation);
SpawnedActors.Add(NewActor);
}
FVector AStrategy_PlayerController::GetMousePos()
{
FHitResult Hit;
GetHitResultUnderCursor(ECollisionChannel::ECC_Visibility, false, Hit);
return Hit.Location;
}
Thank you for your response.