Releases: ramokz/phantom-camera
v0.6.2.2
🐛 Fixes
- Resolved an issue where a crash could occur when you
queue_free()
a PCam node due to an invalid reference to thePCamHost
node. (#175) - Resolved an issue where changing the
Camera3D
resource properties via aPCam3D's
setter methods wouldn't update theCamera3D
if aPCam
was the active one. (#184)- 🔍 Thanks @Zaphodious for reporting this. (#183)
- Resolved an issue where Look At (for
PCam3D
) didn't assign its target properly. (#182)
v0.6.2.1
🐛 Fixes
- Resolved an issue where if you used a
Third Person Follow
PCam3D
with bothdamping
enabled, with a smalldamping value
, and afollow target
far away from a global position of (0, 0, 0) the camera would very slowly move towards its intended position from (0, 0, 0). Leading to a potentially long wait before you could realistically make use of the camera's intended behaviour. (#167)- 🔍 Thanks @MartinFretigne for spotting and reporting this. (#166)
v0.6.2
🛠️ Changes & Improvements
- Improved the ability to seamlessly transition between areas a
Limit
applies. The previous version had an issue where there would be a quirky jump as you transition between neighbouringLimit
areas. As a result from this change, the 2D damping logic has been reverted to pre-0.6, which means the damping applies an interpolation to the movement, rather than relying on theCamera2D's
Position Smoothing. Like the previous change, this shouldn't have any notable impact. - Added
is_tweening
signal — emitted whenever aPCam
is tweening. - Allow for adjusting
Follow Properties
in the node inspector, such asFollow Offset
andDamping
, even without aFollow Target
whenever theFollow Mode
is not set toNone
. This is to allow for dynamically applying aFollow Target
during runtime while allowing to setFollow Properties
if they're known during compilation and not being forced to do so via code. - Added a few missing
void
return types to various functions. - Added a default value to
Follow Target
. Allows for resetting the property using the reset button to the left of the property button. - Added a type to the 2D and 3D
Follow Target
andFollow Path Target
. It means that the pop-up menu selector only allows for selectingNode2D
/Node3D
andPath2D
/Path3D
nodes, respectively. - Removed unused icons.
🐛 Fixes
- Resolved an issue where the
Camera2D
Limit
size wouldn't reset properly while tweening betweenPCam2D
's if both were using aCollisionShape2D
as their limiter. Resulting in the camera snapping in one direction. - Resolved a regression with the
Frame Preview
not updating in 2D scenes when changing theZoom
property. This was due to a bug where the variable namezoom
inPhantomCamera2D.gd
didn't trigger the setter, and consequently the_draw
function call, resulting in the preview not updating. The fix here was to rename the variable tocamera_zoom
instead. - Resolved an issue where loading a 2D scene where a Limit was being applied via either a
TileMap
orCollisionShape2D
(Shape2D
) would result in aPCam2D
not being able to fetch the node, resulting in updates to theLimit Node
not updating thePCam2D
limit. The solution was to wait until thePCam2D
had called its_ready()
function before validating theLimit Path
property when the scene is loaded. - Resolved an issue where tweens would transition for one additional frame for every transition.
- Resolved an issue when downloading and loading the addon where either errors or a crash would occur. This was due to
scale_with_editor_scale
was enabled on some .svg icons, which scaled them to look correct on high resolution monitors. This issue should be resolved in Godot 4.3, but until then this property will be disabled to avoid user frustration.
v0.6.1
✨ New Features
Pixel Perfect (2D)

To support pixel perfect camera movement, a new toggle option to snap Camera2D
to whole pixels has been added.
This should be particularly useful in pixel art projects, where assets should always be aligned to the monitor's pixels to avoid unintended stretching.
- 🥇 Thanks to @GrogsyShovel for the contribution (#156, before/after examples can be found in the PR's description).
CollisionShape2D Limit Support

In addition to allowing TileMaps
to apply the Camera2D Limit
, a CollisionShape2D
can also be used to apply the Limit
values using its Shape2D
property. It will automatically update the limit when the Shape2D
is changed.
PhantomCamera Signals

Support for PCam
signals have been added. This is meant to allow for receiving callbacks when specific events begins or ends for each PCam
. This has been added for both PCam2D
and Pcam3D
nodes.
List of added signals:
became_active
- Emitted when thePCam
becomes active.became_inactive
- Emitted when thePCam
becomes inactive.tween_started
- Emitted when theCamera
starts to tween to thePCam
.tween_interrupted(PhantomCamera pcam)
- Emitted when the tween is interrupted due to anotherPCam
becoming active.tween_completed
- Emitted when theCamera
has completed its tween to thePCam
.
⚠️ Breaking Changes
- Property name, such as the
TileMap Limit
, has been renamed with a genericNode Limit
property - the same goes for setter/getter methods. As a result, existing property values will likely reset upon loading scenes that have any overrides, and setter/getter calls will produce errors if used in scripts until renamed to the new ones.
This change is to allow other node types to be assigned to the property, such as the newly addedCollisionShape2D
, but also to make the names less specific and more in line with other property names.- The property value loss can be mitigated by manually updating property values in the
.tscn
files in a text editor.
- The property value loss can be mitigated by manually updating property values in the
🛠️ Changes & Improvements
- Added the ability to reset most properties to a default value. This has not been applied to every property, such as
Follow Mode
, to avoid accidentally resetting critical property values. TileMap Limit
nodes will now update theLimit
size after theTileSet
is changed. Note: This will only be triggered after leaving theTileMap
editor panel.- Updated
TileMap Limit Margin
to typeVector4i
instead ofVector4
. Changed due toCamera2D
Limit
property only supports integer values. - Moved
Zoom
property fromphantom_camera_properties.gd
tophantom_camera_2D.gd
. Changed due to theZoom
property is only used in 2D scenes andPCam2D
. - Updated and organized all the addon scripts by grouping each category, i.e.
const
,vars
,func
etc., into their own, collapsable, regions.
🐛 Fixes
- Resolved an issue where
Framed Follow
in 3D scenes would not apply its distance and offset upon loading a scene. Resulting in the camera zooming into its target and effectively breaking on load. - Resolved an issue where tweening between
PCam2Ds
while the initialPCam2D
'sFollow Damping
were enabled led to undesired transition easings and sudden camera jumps at the end of the tween. - Resolved an issue where using the getter method for Limit only returned
Limit Left
.
⚕️ New Contributors
v0.6
✨ New Features

Editor Updater
Whenever a new update of Phantom Camera is released on GitHub, the editor will show a prompt to update to the latest version directly from the editor.
Code and layout for this feature was replicated from the Dialogue Manager addon by @nathanhoad.
Camera2D Limit + TileMap support
Utilizing the built-in Limit
properties of Camera2D
nodes, you can now limit the position of the camera to a specified area. Optionally, it also supports the built-in smoothing property. So whenever the edge of the limit is reached it will gradually ease to its limit, as opposed to immediately stop once it reaches the edge.
On top of the existing built-in feature set, TileMap
node can also optionally be used as a way to limit the Camera2D
movement. An optional margin can also be set to further adjust the limit's size.
The editor preview area of the clamped area can be toggled within the editor.
Example Scene
addons/phantom_camera/examples/example_scenes/2D/2DLimitExampleScene.tscn
- Thanks @ManicMarrc for the initial Tile Map clamp suggestion #109
- Thanks @spheras for the additional suggestion of supporting
Camera2D
Limit
property #139 - Thanks @GrogsyShovel for fixing a property issue #142

PhantomCamera2D Frame Preview
PCam2D
nodes will now by default show what it will frame (green rectangle) when instantiated, similar to the purple rectangle a Camera2D
shows. This is to help determine the composition of the individual PCam2D
without switching the priority around.
This can optionally be disabled per instance to reduce screen clutter.
- Thanks @filipinyo for the proposal #131
🛠️ Changes & Improvements
PCam2D
now uses thePosition Smoothing
property of theCamera2D
instead of its own interpolation method. The damping should be very similar, but there might be a minor damping speed difference compared to releases prior to this.- Zoom property for PCam2D now has linked values, meaning adjusting the zoom by default now changes the width and height at the same time. Identical how
Camera2D
property behaves.
🐛 Fixes
- Resolved an issue where the
PCam2D
Priority Override
property wasn't being set. - Resolved an issue where
Framed Follow
mode would behave strangely if it wasn't the firstPCam
to have the highest priority when a scene starts.- Thanks @PanHoracy for the report #143
- Resolved an issue where the
Camera
would jump to and tween from unexpected positions if theCamera
's parent nodes had any positional offsets. - Resolved an issue where
Third Person Follow
's SpringArm3D node wasn't updating its length during runtime when using the setter method.- Thanks @niceandgoodonline for the report #135
- Resolved an issue an on high DPI monitors where editor icons didn't scale properly and looked tiny compared to others.
⚕️ New Contributors
- @GrogsyShovel made their first contribution in #142
- Special shout out for being the first project contributor 🎉
v0.5.0.5
v0.5.0.4
v0.5.0.3
🛠️ Fixes
- Fixed issue where assigning targets to
Follow Group
orLook at Group
entirely via code would never trigger their respective logic.- Thanks @mharitsnf for spotting this.
- Fixed issue where removing the last
Look At Group
node from the array would cause continuous error output. - Fixed issue when applying a Look At target while using Third Person Follow mode would cause a null exception and crash upon loading.
- Thanks @matt-seaton for spotting this.
⬆️ Improvements
- Added ability to erase
Follow
andPath
target nodes via setter method. - Updated
.gitattributes
so that anything but theaddons/
directory content won't get downloaded.
v0.5.0.2
🛠️ Fixes
- Fixed an issue where instantiating a
Camera
node and then aPhantomCameraHost
node will trigger a series of errors until aPhantomCamera
node was added as well. - Converted additional missing
get_position()
calls toget_global_position()
- Converted additional missing
get_rotation()
calls toget_global_rotation()
Thanks @m4rr5 for spotting these!