Skip to main content

What Problem Does This Solve?

When working with LCK, you’ll pass configuration structs to methods and handle interaction data from UI. This page documents:
  • Recording parameters (resolution, bitrate, framerate)
  • Camera mode settings (FOV, smoothness, distance)
  • UI interaction data (touch events, button states)
  • Color palette constants
Understanding these types helps you configure recording quality, customize camera behavior, and build custom UI.

When to Use This

Reference this when:
  • Configuring recording parameters
  • Setting up camera modes
  • Handling UI events
  • Styling custom UI components
  • Working with audio channels

Recording Configuration

FLCKRecorderParams

What it’s for: Configure video/audio recording settings
USTRUCT(BlueprintType)
struct FLCKRecorderParams
{
    GENERATED_BODY()
    
    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    int32 Width = 1920;
    
    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    int32 Height = 1080;
    
    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    int32 Framerate = 30;
    
    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    int32 VideoBitrate = 2000000;  // 2 Mbps
    
    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    int32 Samplerate = 48000;
    
    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    int32 AudioBitrate = 256000;   // 256 Kbps
};
FieldTypeDefaultDescriptionRange
Widthint321920Video width in pixels640-3840
Heightint321080Video height in pixels480-2160
Framerateint3230Frames per second15-120
VideoBitrateint322000000Video bitrate in bps500k-100M
Samplerateint3248000Audio sample rate in Hz44100, 48000
AudioBitrateint32256000Audio bitrate in bps64k-512k
Common use:
// HD recording at 60 FPS
FLCKRecorderParams Params;
Params.Width = 1920;
Params.Height = 1080;
Params.Framerate = 60;
Params.VideoBitrate = 8 << 20;  // 8 Mbps
Params.AudioBitrate = 256000;   // 256 Kbps

Recorder->SetupRecorder(Params, CaptureComponent);

FLCKRecordingProfileSettings

What it’s for: Predefined quality profiles (configured in Project Settings)
USTRUCT(BlueprintType)
struct FLCKRecordingProfileSettings
{
    GENERATED_BODY()
    
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
    int32 Width = 1280;
    
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
    int32 Height = 720;
    
    UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ClampMin = "15", ClampMax = "120"))
    int32 Framerate = 30;
    
    UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ClampMin = "500000", ClampMax = "100000000"))
    int32 VideoBitrate = 4000000;  // 4 Mbps
    
    UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ClampMin = "64000", ClampMax = "512000"))
    int32 AudioBitrate = 128000;   // 128 Kbps
    
    UPROPERTY(BlueprintReadOnly)
    int32 Samplerate = 48000;
};
Typical profiles:
QualityResolutionBitrateFPSUse Case
SD1280×7202-4 Mbps30Mobile, performance mode
HD1920×10804-8 Mbps30Standard quality
2K2560×14408-12 Mbps30High quality
4K3840×216012-20 Mbps30Maximum quality (PC only)

Camera Mode Settings

FLCKSelfieModeDefaults

What it’s for: Default settings for Selfie camera mode
USTRUCT(BlueprintType)
struct FLCKSelfieModeDefaults
{
    GENERATED_BODY()
    
    UPROPERTY(EditAnywhere, meta = (ClampMin = "20.0", ClampMax = "120.0"))
    float FOV = 80.0f;
    
    UPROPERTY(EditAnywhere, meta = (ClampMin = "0.0", ClampMax = "100.0"))
    float Smoothness = 50.0f;
    
    UPROPERTY(EditAnywhere, meta = (ClampMin = "0.5", ClampMax = "10.0"))
    float FollowDistance = 2.0f;
    
    UPROPERTY(EditAnywhere)
    bool bFollowEnabled = false;
};
FieldTypeDefaultDescriptionRange
FOVfloat80.0Field of view in degrees20-120
Smoothnessfloat50.0Camera movement smoothing0-100
FollowDistancefloat2.0Distance from player in meters0.5-10.0
bFollowEnabledboolfalseAuto-follow player movement-
Example:
// Selfie mode with auto-follow
FLCKSelfieModeDefaults Selfie;
Selfie.FOV = 75.0f;
Selfie.Smoothness = 60.0f;
Selfie.FollowDistance = 1.5f;
Selfie.bFollowEnabled = true;

FLCKFirstPersonModeDefaults

What it’s for: Default settings for First Person camera mode
USTRUCT(BlueprintType)
struct FLCKFirstPersonModeDefaults
{
    GENERATED_BODY()
    
    UPROPERTY(EditAnywhere, meta = (ClampMin = "20.0", ClampMax = "120.0"))
    float FOV = 90.0f;
    
    UPROPERTY(EditAnywhere, meta = (ClampMin = "0.0", ClampMax = "100.0"))
    float Smoothness = 75.0f;
};
FieldTypeDefaultDescription
FOVfloat90.0Field of view (wider for FPS)
Smoothnessfloat75.0Camera lag for head movement
Typical values:
  • Low smoothness (0-30): Sharp, responsive (competitive FPS)
  • Medium smoothness (40-70): Balanced (standard FPS)
  • High smoothness (80-100): Cinematic feel (story-driven)

FLCKThirdPersonModeDefaults

What it’s for: Default settings for Third Person camera mode
USTRUCT(BlueprintType)
struct FLCKThirdPersonModeDefaults
{
    GENERATED_BODY()
    
    UPROPERTY(EditAnywhere, meta = (ClampMin = "20.0", ClampMax = "120.0"))
    float FOV = 90.0f;
    
    UPROPERTY(EditAnywhere, meta = (ClampMin = "0.0", ClampMax = "100.0"))
    float Smoothness = 100.0f;
    
    UPROPERTY(EditAnywhere, meta = (ClampMin = "0.5", ClampMax = "10.0"))
    float Distance = 2.0f;
    
    UPROPERTY(EditAnywhere, meta = (ClampMin = "-90.0", ClampMax = "90.0"))
    float PitchAngle = -30.0f;
};
FieldTypeDefaultDescription
FOVfloat90.0Field of view
Smoothnessfloat100.0Camera lag (very smooth)
Distancefloat2.0Distance behind player in meters
PitchAnglefloat-30.0Vertical angle (-90 to +90 degrees)
Example:
// Over-the-shoulder camera
FLCKThirdPersonModeDefaults ThirdPerson;
ThirdPerson.FOV = 85.0f;
ThirdPerson.Distance = 1.5f;
ThirdPerson.PitchAngle = -20.0f;  // Slightly above shoulder
ThirdPerson.Smoothness = 90.0f;

UI Interaction Data

FLCKTapData

What it’s for: Touch/pointer interaction event data from UI buttons
USTRUCT()
struct LCKUI_API FLCKTapData
{
    GENERATED_BODY()
    
    UPROPERTY()
    FVector ButtonLocation = FVector::ZeroVector;
    
    UPROPERTY()
    FVector ButtonRightVector = FVector::ZeroVector;
    
    UPROPERTY()
    FVector ButtonForwardVector = FVector::ZeroVector;
    
    UPROPERTY()
    FVector TapLocation = FVector::ZeroVector;
    
    UPROPERTY()
    bool IsPressed = false;
};
FieldTypeDescription
ButtonLocationFVectorWorld position of the button
ButtonRightVectorFVectorButton’s local right direction
ButtonForwardVectorFVectorButton’s local forward direction
TapLocationFVectorWorld position of tap/click
IsPressedboolWhether button is currently pressed
When you’ll see this: Inside button interaction callbacks
Button->OnTapStarted.AddDynamic(this, &AMyActor::HandleButtonTap);

void AMyActor::HandleButtonTap(const FLCKTapData& TapData)
{
    UE_LOG(LogTemp, Log, TEXT("Button at %s pressed"), 
        *TapData.ButtonLocation.ToString());
}

UI Styling

FLCKColor

What it’s for: Standard color palette for LCK UI components
USTRUCT()
struct LCKUI_API FLCKColor
{
    static constexpr FColor Primary         {8, 8, 8};       // #080808
    static constexpr FColor PrimaryText     {220, 220, 220}; // #DCDCDC
    static constexpr FColor Secondary       {16, 16, 16};    // #101010
    static constexpr FColor Disabled        {96, 96, 96};    // #606060
    static constexpr FColor ButtonDefault   {40, 40, 40};    // #282828
    static constexpr FColor ButtonIconDefault {220, 220, 220}; // #DCDCDC
    static constexpr FColor ButtonActive    {94, 69, 255};   // #5E45FF
    static constexpr FColor Debug           {255, 0, 255};   // #FF00FF
    static constexpr FColor Alert           {255, 42, 42};   // #FF2A2A
    static constexpr FColor Success         {32, 196, 64};   // #20C440
    static constexpr FColor White           {255, 255, 255}; // #FFFFFF
    static constexpr FColor Black           {0, 0, 0};       // #000000
};
ColorRGBHexUse Case
Primary(8, 8, 8)#080808Main background
PrimaryText(220, 220, 220)#DCDCDCPrimary text
Secondary(16, 16, 16)#101010Secondary background
Disabled(96, 96, 96)#606060Disabled UI elements
ButtonDefault(40, 40, 40)#282828Default button color
ButtonActive(94, 69, 255)#5E45FFActive/pressed button
Alert(255, 42, 42)#FF2A2ARecording indicator, errors
Success(32, 196, 64)#20C440Success state
Example usage:
// Set button color based on state
if (bIsRecording)
{
    ButtonMaterial->SetVectorParameterValue(
        TEXT("BaseColor"), 
        FLinearColor(FLCKColor::Alert)
    );
}
else
{
    ButtonMaterial->SetVectorParameterValue(
        TEXT("BaseColor"), 
        FLinearColor(FLCKColor::ButtonDefault)
    );
}

Audio Channel Bitmask

TLCKAudioChannelsMask

What it’s for: Combine multiple audio channels using bitwise operations
typedef uint64 TLCKAudioChannelsMask;
Usage:
// Combine game audio + microphone
TLCKAudioChannelsMask Channels = 
    ELCKAudioChannel::Game | ELCKAudioChannel::Microphone;

// Check if mask contains microphone
bool HasMic = (Channels & ELCKAudioChannel::Microphone) != 0;

// Start capture with both channels
AudioSource->StartCapture(Channels);
Common combinations:
// Game audio only
TLCKAudioChannelsMask GameOnly = ELCKAudioChannel::Game;

// Microphone only
TLCKAudioChannelsMask MicOnly = ELCKAudioChannel::Microphone;

// Game + Mic (typical recording)
TLCKAudioChannelsMask Standard = 
    ELCKAudioChannel::Game | ELCKAudioChannel::Microphone;

// Game + Mic + Voice chat
TLCKAudioChannelsMask AllChannels = 
    ELCKAudioChannel::Game | 
    ELCKAudioChannel::Microphone | 
    ELCKAudioChannel::VoiceChat;

Button UI Types

ELCKButtonType

What it’s for: Define button shape and size for 3D UI
UENUM(BlueprintType)
enum class ELCKButtonType : uint8
{
    Square      UMETA(DisplayName = "Square"),
    Rectangle   UMETA(DisplayName = "Rectangle"),
    Tab         UMETA(DisplayName = "Tab"),
    Selector    UMETA(DisplayName = "Selector")
};
TypeBox Extent (cm)Aspect RatioUse Case
Square(0.4, 2.4, 2.4)1:1Icons, single-action buttons
Rectangle(0.4, 6.0, 2.4)2.5:1Text buttons, labels
Tab(0.4, 4.4, 2.4)1.83:1Tab navigation
Selector(2.4, 4.4, 0.8)5.5:1Sliders, selectors

Complete Configuration Example

void AMyRecorder::SetupRecording()
{
    // 1. Configure recorder params
    FLCKRecorderParams Params;
    Params.Width = 1920;
    Params.Height = 1080;
    Params.Framerate = 60;
    Params.VideoBitrate = 10 << 20;  // 10 Mbps
    Params.AudioBitrate = 256000;    // 256 Kbps
    
    // 2. Set up camera mode
    FLCKThirdPersonModeDefaults ThirdPerson;
    ThirdPerson.FOV = 85.0f;
    ThirdPerson.Distance = 2.0f;
    ThirdPerson.PitchAngle = -25.0f;
    ThirdPerson.Smoothness = 90.0f;
    
    // 3. Configure audio channels
    TLCKAudioChannelsMask Channels = 
        ELCKAudioChannel::Game | ELCKAudioChannel::Microphone;
    
    // 4. Start recording
    ULCKRecorderSubsystem* Recorder = GetWorld()->GetSubsystem<ULCKRecorderSubsystem>();
    Recorder->SetupRecorder(Params, CaptureComponent);
    Recorder->StartRecording();
}

Key Takeaways

FLCKRecorderParams — Configure video/audio quality
Camera mode structs — Customize camera behavior (FOV, smoothness, distance)
FLCKTapData — Handle UI button interactions
FLCKColor — Use standard color palette for consistency
TLCKAudioChannelsMask — Combine audio channels with bitwise OR