I made “grid Tile Manager” using “UInstancedStaticMeshComponent”
I have made My Custom InstancedStaticMeshComponent —I will call it “GridMeshComp”— and attached it to my “Grid Tile Manager”.
I make Grid Instances using GridMeshComp->AddInstance(); it will called in OnConstruction();
I want to give mouse cursor over event to Every Instances. so I made OnBeginCursorOver and OnEndBeginCursorOver to my “GridMeshComp”. these will change Grid instance’s color.
after doing that, when I moved mouse cursor on grid, Event was activated. but All of Grid Instances’ color are changed… I want to change color of “One” Grid Instance that I touched.
is there Any Solution?

header
.....
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Grid)
class UGridMeshComponent* GridMeshComp;
.....
cpp
void AGridSetup::BeginPlay()
{
Super::BeginPlay();
//give Touch Event to GridMeshComp
GridMeshComp->OnBeginCursorOver.AddDynamic(this, &AGridSetup::CustomOnBeginMouseOver);
GridMeshComp->OnEndCursorOver.AddDynamic(this, &AGridSetup::CustomOnEndMouseOver);
}
void AGridSetup::OnConstruction(const FTransform & Transform)
{
Super::OnConstruction(Transform);
UE_LOG(LogTemp, Warning, TEXT("AGridSetup::OnConstruction"));
SpawnGrid();
}
void AGridSetup::SpawnGrid()
{
GridMeshComp->ClearInstances();
FTransform transform = FTransform::Identity;
FVector currentPosition = FVector::ZeroVector;
float init_y = currentPosition.Y;
float init_x = currentPosition.X;
for (int32 i = grid_x; i != 0; i--)
{
for (int32 j = grid_y; j != 0; j--)
{
//Make Instance
GridMeshComp->AddInstance(transform);
//next Position
currentPosition.Y += gridSize;
transform.SetTranslation(currentPosition);
}
//if j end, next position for X and init Y position.
currentPosition.X += gridSize;
currentPosition.Y = init_y;
transform.SetTranslation(currentPosition);
}
}
void AGridSetup::CustomOnBeginMouseOver(UPrimitiveComponent * TouchedComponent)
{
UE_LOG(LogTemp, Warning, TEXT("AGridSetup::CustomOnBeginMouseOver"));
if (GridMeshComp->RedMaterial)
{
GridMeshComp->SetMaterial(0, GridMeshComp->RedMaterial);
}
}
void AGridSetup::CustomOnEndMouseOver(UPrimitiveComponent * TouchedComponent)
{
UE_LOG(LogTemp, Warning, TEXT("AGridSetup::CustomOnEndMouseOver"));
if (GridMeshComp->BlueMaterial)
{
GridMeshComp->SetMaterial(0, GridMeshComp->BlueMaterial);
}
}
