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
- Audio source channel configuration and validation
- Audio plugin runtime information
- Telemetry event types
Understanding these types helps you configure recording quality, customize camera behavior, build custom UI, and inspect audio system state.
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 and source configuration
- Validating audio plugin configuration before recording
- Querying registered audio plugin capabilities
- Working with telemetry events
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 = 2 << 20; // 2097152 (~2 Mbps)
UPROPERTY(EditAnywhere, BlueprintReadWrite)
int32 Samplerate = 48000;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
int32 AudioBitrate = 256 << 10; // 262144 (~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 | 2 << 20 (2097152) | Video bitrate in bps | 500k-100M |
Samplerate | int32 | 48000 | Audio sample rate in Hz | 44100, 48000 |
AudioBitrate | int32 | 256 << 10 (262144) | 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 = 12 << 20; // 12 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 | 4 Mbps | 30 | Mobile, performance mode |
| HD | 1920×1080 | 12 Mbps | 60 | Standard quality |
| 2K | 2560×1440 | 20 Mbps | 60 | High quality |
| 4K | 3840×2160 | 35 Mbps | 60 | 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();
}
Audio Source Channel Presets
FLCKAudioSourceChannels
What it’s for: Default channel configuration enabling both microphone and game audio capture.
USTRUCT(BlueprintType)
struct FLCKAudioSourceChannels
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite)
bool bMicrophoneEnabled = true;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
bool bGameAudioEnabled = true;
};
| Field | Type | Default | Description |
|---|
bMicrophoneEnabled | bool | true | Enable microphone capture |
bGameAudioEnabled | bool | true | Enable game audio capture |
FLCKAudioSourceGameOnly
What it’s for: Channel preset for sources that only provide game audio (e.g., FMOD, Wwise).
USTRUCT(BlueprintType)
struct FLCKAudioSourceGameOnly
{
GENERATED_BODY()
UPROPERTY(Config, EditAnywhere, BlueprintReadWrite, Category = "Audio")
bool bGameAudioEnabled = true;
};
| Field | Type | Default | Description |
|---|
bGameAudioEnabled | bool | true | Enable game audio capture |
FLCKAudioSourceMicOnly
What it’s for: Channel preset for sources that only provide microphone input (e.g., Oboe on Android).
USTRUCT(BlueprintType)
struct FLCKAudioSourceMicOnly
{
GENERATED_BODY()
UPROPERTY(Config, EditAnywhere, BlueprintReadWrite, Category = "Audio")
bool bMicrophoneEnabled = true;
};
| Field | Type | Default | Description |
|---|
bMicrophoneEnabled | bool | true | Enable microphone capture |
FLCKAudioSourceVoiceChat
What it’s for: Channel preset for voice chat sources that capture microphone and incoming voice audio (e.g., Vivox).
USTRUCT(BlueprintType)
struct FLCKAudioSourceVoiceChat
{
GENERATED_BODY()
UPROPERTY(Config, EditAnywhere, BlueprintReadWrite, Category = "Audio")
bool bMicrophoneEnabled = true;
UPROPERTY(Config, EditAnywhere, BlueprintReadWrite, Category = "Audio")
bool bVoiceAudioEnabled = true;
};
| Field | Type | Default | Description |
|---|
bMicrophoneEnabled | bool | true | Outgoing microphone capture |
bVoiceAudioEnabled | bool | true | Incoming voice chat audio |
Audio Configuration Validation
FLCKAudioConfigValidation
What it’s for: Result of validating the current audio plugin configuration. Returned by the audio system to report issues such as missing microphone sources or duplicate game audio plugins.
USTRUCT(BlueprintType)
struct FLCKAudioConfigValidation
{
GENERATED_BODY()
UPROPERTY(BlueprintReadOnly, Category = "LCK")
bool bIsValid = true;
UPROPERTY(BlueprintReadOnly, Category = "LCK")
TArray<FString> Warnings;
UPROPERTY(BlueprintReadOnly, Category = "LCK")
ELCKGameAudioType ActiveGameAudio = ELCKGameAudioType::None;
UPROPERTY(BlueprintReadOnly, Category = "LCK")
bool bHasMicrophoneSource = false;
UPROPERTY(BlueprintReadOnly, Category = "LCK")
int32 MicrophoneSourceCount = 0;
UPROPERTY(BlueprintReadOnly, Category = "LCK")
TArray<FString> EnabledMicrophoneSources;
};
| Field | Type | Default | Description |
|---|
bIsValid | bool | true | Whether the audio config is valid for recording |
Warnings | TArray<FString> | [] | Human-readable warning messages |
ActiveGameAudio | ELCKGameAudioType | None | The active game audio middleware type |
bHasMicrophoneSource | bool | false | Whether at least one mic source is available |
MicrophoneSourceCount | int32 | 0 | Number of registered microphone sources |
EnabledMicrophoneSources | TArray<FString> | [] | Names of all enabled microphone sources |
Common use:
FLCKAudioConfigValidation Validation = AudioSystem->ValidateConfig();
if (!Validation.bIsValid)
{
for (const FString& Warning : Validation.Warnings)
{
UE_LOG(LogLCK, Warning, TEXT("Audio config: %s"), *Warning);
}
}
Audio Plugin Info
FLCKAudioPluginInfo
What it’s for: Describes a registered audio plugin and its capabilities. Used by the audio system to enumerate available plugins at runtime.
USTRUCT(BlueprintType)
struct FLCKAudioPluginInfo
{
GENERATED_BODY()
UPROPERTY(BlueprintReadOnly, Category = "LCK")
FString ModuleName;
UPROPERTY(BlueprintReadOnly, Category = "LCK")
FString DisplayName;
UPROPERTY(BlueprintReadOnly, Category = "LCK")
bool bIsLoaded = false;
UPROPERTY(BlueprintReadOnly, Category = "LCK")
bool bMicrophoneEnabled = false;
UPROPERTY(BlueprintReadOnly, Category = "LCK")
bool bGameAudioEnabled = false;
};
| Field | Type | Default | Description |
|---|
ModuleName | FString | "" | Module name (e.g., "LCKFMOD") |
DisplayName | FString | "" | Human-readable name (e.g., "FMOD Studio") |
bIsLoaded | bool | false | Whether the module is currently loaded |
bMicrophoneEnabled | bool | false | Plugin supports microphone capture |
bGameAudioEnabled | bool | false | Plugin supports game audio capture |
Telemetry Types
FLCKTelemetryValue
What it’s for: A variant value type used in telemetry events to hold different data types in a single field.
USTRUCT(BlueprintType)
struct FLCKTelemetryValue
{
GENERATED_BODY()
UPROPERTY(BlueprintReadWrite, Category = "LCK Telemetry")
int32 IntValue = 0;
UPROPERTY(BlueprintReadWrite, Category = "LCK Telemetry")
float FloatValue = 0.0f;
UPROPERTY(BlueprintReadWrite, Category = "LCK Telemetry")
FString StringValue;
UPROPERTY(BlueprintReadWrite, Category = "LCK Telemetry")
bool BoolValue = false;
UPROPERTY(BlueprintReadWrite, Category = "LCK Telemetry")
uint8 ValueType = 0; // 0 = Int, 1 = Float, 2 = String, 3 = Bool
};
| Field | Type | Default | Description |
|---|
IntValue | int32 | 0 | Integer payload (used when ValueType == "Int") |
FloatValue | float | 0.0 | Float payload (used when ValueType == "Float") |
StringValue | FString | "" | String payload (used when ValueType == "String") |
BoolValue | bool | false | Boolean payload (used when ValueType == "Bool") |
ValueType | uint8 | 0 | Discriminator: 0 = Int, 1 = Float, 2 = String, 3 = Bool |
FLCKTelemetryEvent
What it’s for: Represents a single telemetry event with a type identifier and a map of contextual key-value pairs.
USTRUCT(BlueprintType)
struct FLCKTelemetryEvent
{
GENERATED_BODY()
UPROPERTY(BlueprintReadWrite, Category = "LCK Telemetry")
ELCKTelemetryEventType EventType = ELCKTelemetryEventType::GameInitialized;
UPROPERTY(BlueprintReadWrite, Category = "LCK Telemetry")
TMap<FString, FLCKTelemetryValue> Context;
};
| Field | Type | Default | Description |
|---|
EventType | ELCKTelemetryEventType | GameInitialized | Event type enum value |
Context | TMap<FString, FLCKTelemetryValue> | {} | Key-value pairs of event metadata |
Common use:
FLCKTelemetryEvent Event;
Event.EventType = ELCKTelemetryEventType::RecordingStarted;
FLCKTelemetryValue ResolutionValue;
ResolutionValue.StringValue = TEXT("1920x1080");
ResolutionValue.ValueType = 2; // String
Event.Context.Add(TEXT("Resolution"), ResolutionValue);
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
Audio channel presets — FLCKAudioSourceChannels, GameOnly, MicOnly, VoiceChat
FLCKAudioConfigValidation — Validate audio plugin configuration before recording
FLCKAudioPluginInfo — Enumerate registered audio plugins at runtime
Telemetry types — FLCKTelemetryValue and FLCKTelemetryEvent for analytics