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
};
| Field | Type | Default | Description | Range |
|---|
Width | int32 | 1920 | Video width in pixels | 640-3840 |
Height | int32 | 1080 | Video height in pixels | 480-2160 |
Framerate | int32 | 30 | Frames per second | 15-120 |
VideoBitrate | int32 | 2000000 | Video bitrate in bps | 500k-100M |
Samplerate | int32 | 48000 | Audio sample rate in Hz | 44100, 48000 |
AudioBitrate | int32 | 256000 | Audio bitrate in bps | 64k-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:
| Quality | Resolution | Bitrate | FPS | Use Case |
|---|
| SD | 1280×720 | 2-4 Mbps | 30 | Mobile, performance mode |
| HD | 1920×1080 | 4-8 Mbps | 30 | Standard quality |
| 2K | 2560×1440 | 8-12 Mbps | 30 | High quality |
| 4K | 3840×2160 | 12-20 Mbps | 30 | Maximum 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;
};
| Field | Type | Default | Description | Range |
|---|
FOV | float | 80.0 | Field of view in degrees | 20-120 |
Smoothness | float | 50.0 | Camera movement smoothing | 0-100 |
FollowDistance | float | 2.0 | Distance from player in meters | 0.5-10.0 |
bFollowEnabled | bool | false | Auto-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;
};
| Field | Type | Default | Description |
|---|
FOV | float | 90.0 | Field of view (wider for FPS) |
Smoothness | float | 75.0 | Camera 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;
};
| Field | Type | Default | Description |
|---|
FOV | float | 90.0 | Field of view |
Smoothness | float | 100.0 | Camera lag (very smooth) |
Distance | float | 2.0 | Distance behind player in meters |
PitchAngle | float | -30.0 | Vertical 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;
};
| Field | Type | Description |
|---|
ButtonLocation | FVector | World position of the button |
ButtonRightVector | FVector | Button’s local right direction |
ButtonForwardVector | FVector | Button’s local forward direction |
TapLocation | FVector | World position of tap/click |
IsPressed | bool | Whether 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
};
| Color | RGB | Hex | Use Case |
|---|
Primary | (8, 8, 8) | #080808 | Main background |
PrimaryText | (220, 220, 220) | #DCDCDC | Primary text |
Secondary | (16, 16, 16) | #101010 | Secondary background |
Disabled | (96, 96, 96) | #606060 | Disabled UI elements |
ButtonDefault | (40, 40, 40) | #282828 | Default button color |
ButtonActive | (94, 69, 255) | #5E45FF | Active/pressed button |
Alert | (255, 42, 42) | #FF2A2A | Recording indicator, errors |
Success | (32, 196, 64) | #20C440 | Success 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;
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")
};
| Type | Box Extent (cm) | Aspect Ratio | Use Case |
|---|
Square | (0.4, 2.4, 2.4) | 1:1 | Icons, single-action buttons |
Rectangle | (0.4, 6.0, 2.4) | 2.5:1 | Text buttons, labels |
Tab | (0.4, 4.4, 2.4) | 1.83:1 | Tab navigation |
Selector | (2.4, 4.4, 0.8) | 5.5:1 | Sliders, 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