The Orbital Camera System provides a smooth, controllable camera that orbits around a specific point in 3D space. This system is ideal for property previews, showcasing locations, or any scenario where you need a cinematic orbital view.
Basic Usage
To enable the Orbital Camera inside of your resource file just add useOrbitalCam() useControllableOrbitalCam() inside your code like example below.
useOrbitalCam()useControllableOrbitalCam()
Features
Smooth orbital movement around a target position
Distance control with minimum and maximum limits
Collision detection to prevent camera clipping through objects
Interpolated positioning for smooth transitions
Controllable input support for user interaction
Core Functions
Initialization
EnableOrbitalCam
Enables the orbital camera system and starts the main camera loop.
Returns:number - Handle for the camera instance
Example:
DisableOrbitalCam
Disables the orbital camera system and returns to gameplay camera.
Parameters:
immediately (boolean, optional) - If true, disables immediately without interpolation
Example:
Position Control
SetOrbitalCamLookAtPosition
Sets the target position that the camera will orbit around.
Parameters:
position (vector3) - World coordinates to focus on
Example:
GetOrbitalCamLookAtPosition
Gets the current look-at position.
Returns:vector3 - Current target position
Distance Control
SetOrbitalCamDistanceToLookAtPos
Sets the distance from the camera to the target position.
Parameters:
distance (number) - Distance in game units
Example:
GetOrbitalCamDistanceToLookAtPos
Gets the current distance to the target position.
Returns:number - Current distance
SetOrbitalCamMinDistanceToLookAtPos
Sets the minimum allowed distance for the orbital camera.
Parameters:
minDistance (number) - Minimum distance in game units
SetOrbitalCamMaxDistanceToLookAtPos
Sets the maximum allowed distance for the orbital camera.
Parameters:
maxDistance (number) - Maximum distance in game units
Angle Control
SetOrbitalCamAngleX
Sets the horizontal rotation angle around the target.
local targetPos = vector3(100.0, 200.0, 30.0)
SetOrbitalCamLookAtPosition(targetPos)
SetOrbitalCamDistanceToLookAtPos(15.0) -- 15 units away
SetOrbitalCamAngleX(45.0) -- Face northeast
local gOrbitalCamPreviewIsEnabled = false
function startPropertyPreviewUsingOrbitalCam(propertyId)
if propertyId then
-- Get property position
local propertyPosition = GetPropertyFromId(tonumber(propertyId)).camPosition
-- Fade out screen for smooth transition
DoScreenFadeOut(500)
-- Set focus and camera parameters
SetFocusPosAndVel(propertyPosition, 0.0, 0.0, 0.0)
SetOrbitalCamLookAtPosition(propertyPosition)
SetOrbitalCamDistanceToLookAtPos(30.0)
SetOrbitalCamMaxDistanceToLookAtPos(80.0)
-- Enable the controllable orbital camera
EnableControllableOrbitalCam()
-- Wait for collision to load
while not Citizen.InvokeNative(0xDA8B2EAF29E872E2, propertyPosition) do
Wait(100)
end
-- Fade back in
DoScreenFadeIn(500)
gOrbitalCamPreviewIsEnabled = true
-- Enable controls for user interaction
triggerControlsPreview()
end
end
function stopPropertyPreviewUsingOrbitalCam()
DoScreenFadeIn(500)
DisableControllableOrbitalCam(true)
ClearFocus()
gOrbitalCamPreviewIsEnabled = false
end