classDiagram
	M_Test *-- GM_Test
	M_Test *-- BP_Camera
	M_Test *-- BP_Character
	GM_Test o-- BP_Character
	GM_Test o-- BP_BasicCamera
	BP_BasicCamera *-- BP_StaticDistanceDeadZoneComponent
	BP_BasicCamera *-- BP_BasicFixedPlaneDeadZoneComponent
	BP_BasicCamera *-- BP_RayTraceFixedPlaneDeadZoneComponent
	
	BP_CameraComponent <|-- BP_StaticDistanceDeadZoneComponent : Extends
	BP_CameraComponent <|-- BP_FixedPlaneDeadZoneComponent : Extends
	
	class E_CameraMode	{
		<<enumeration>>
		StaticDistanceDeadZone
		BasicFixedPlaneDeadZone
		RayTraceFixedPlaneDeadZone
	}
	class GM_Test{
		%% +RegisterPlayer(Player: int, Character: BP_Character)
		%% +RegisterCamera(Mode: E_CameraMode, Camera, BP_Camera)
	}

Game Mode (GM_Test)

I created a simple GM_Test in the project to keep track of everything happening in this camera test setup. I’ve also set this Game Mode as my override for the map.

image.png

RegisterPlayer(int Player, BP_Character Character)

Each moveable character will call register player when they are spawned into the world. This allows us to keep track of all character that is on screen. For the Static Distance setup, we only care about player 1.

image.png

RegisterCamera(E_CameraMode Mode, BP_Camera)

The camera blue print will register with the GM when it spawns in. If the camera supports multiple mode, it can register it self multiple times with the GM.

image.png

Character (BP_Character)

We keep the character very simple to keep our focus on the camera. Basic actor with a cylinder attached to it. We also set this as our default possessed pawn in GM_Test.

Initialization

The initialization process is straightforward—it tracks the character and sets up input controls. Input initialization occurs during the Possessed event, ensuring it only applies to the character under player control.

image.png

Register Player

Player registration happens at begin play, making character information immediately available to the camera through the GM.

Input Handling

Input handling for this character is very basic and gives us the ability to control the character.

image.png