(C++) How Can I Touch "Just One" of InstancedStaticMeshComponent's Instance?

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?

266609-after.png

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);
	}
}