PawnSwap
Switch between pawns with smooth camera blends and climb into vehicles and mounts with several seats: roster cycling, driver/passenger seats, validated exits, seat locksβ¦
Highlights
All 16 features βPawnSwap handles everything around who controls which pawn. Add the Pawn Swap Manager to your PlayerController and switch between a roster of pawns - next, previous, by index or by tag - with a smooth view-target blend on every switch: blend time, blend function, exponent and a locked outgoing camera so the blend starts exactly where the view was. The pawn you leave behind can stay unpossessed, get its AI controller or get back the controller it had before you took it.
Vehicles and mounts get one Pawn Swap Seat per seat. Each seat has entry and exit points (named scene components or offsets), a driver or passenger role, a priority and an occupancy state. Entering the driver seat possesses the vehicle with its own blend; leaving it gives you your character back. The occupant is attached to the seat or to a socket, hidden or kept visible, with collision, movement and controller rotation turned off while seated, and everything is restored on exit. Change seats inside the same vehicle, or seat AI passengers directly from the server.
Exits are validated: every exit point is snapped to the ground, tested with the occupant's capsule and checked for line of sight; when all of them are blocked, rings around the vehicle and finally the roof are searched. Seats can be locked, reserved for their owner (claimed by the first player who enters), for a team, or ruled by your own Blueprint function.
An interaction query finds the best seat or pawn within a radius and view angle and returns its prompt text, ready for "Press E to enter" widgets; one Interact node enters, takes over or exits. Spectate any pawn without possessing it and come back. Each pawn can set its own input mode and mouse cursor, and a Setup Input event fires after every switch. The roster and seat occupancy export to a SaveGame-ready struct and restore - respawning missing pawns if needed.
Everything is server-authoritative: client requests go through Server RPCs, seat occupancy replicates with a RepNotify that applies the seated state on every machine, and every switch, seat change and refusal (with a reason) is reported through Blueprint events.
PawnSwap is part of the Alpha XP collection for Unreal Engine 4.27 and 5.8. Every feature is exposed to Blueprints and C++, it ships with styled HTML documentation, and it is compiled and verified warning-free against clean UE 4.27 and UE 5.8 projects.
Key features
- Pawn Swap Manager: possess another pawn on request, server-authoritative
- Smooth view-target blend on switch: blend time, blend function, exponent, lock outgoing
- Pawn roster: register, cycle next/previous, switch by index or tag, auto registration
- Seat component with entry and exit points (scene components or relative offsets)
- Multiple seats per vehicle: driver/passenger roles, priority, occupancy, possess the
- Exit validation: ground snap, capsule overlap, line of sight, ring and roof fallback
- Left-behind controller policy: leave unpossessed, spawn AI controller, restore
- Seated occupant: attach to seat or socket, offset, hide, collision/movement/rotation
- Interaction query: best seat or pawn by radius and view angle with prompt text, plus
- Seat locks and access rules: owner only, same team, owner or team, custom Blueprint rule
- Events: pawn switched, seat entered, seat exited, enter/exit/switch denied with a
- Multiplayer: Server RPCs, replicated seat occupancy with RepNotify, owner-only roster
- Spectate mode: view another pawn without possessing it, cycle the roster, return
- Input mode and mouse cursor per pawn, applied on switch, plus a Setup Input event
- Save/restore of roster and seat occupancy in a SaveGame-ready struct
- Blueprint function library: seats of a vehicle, free seat, occupants, teams, capsule tests
Blueprint & C++ API
The API is organised into these entry points:
| Class | Type | Nodes | Use it for |
|---|---|---|---|
| PawnSwapManagerComponent | Actor component | 35 | Add to a PlayerController (or an AIController for server-side use). |
| PawnSwapSeatComponent | Scene component | 20 | A seat of a vehicle or mount. Add one per seat to the vehicle actor and place it where the occupant sits. |
| PawnSwapLibrary | Function library | 13 | Blueprint helpers for PawnSwap: lookups, seats of a vehicle, teams and capsule tests. |
| PawnSwapPawnComponent | Actor component | 1 | Optional per-pawn settings for PawnSwap: roster tag and auto registration, team, interaction switching, camera blend, controller policy and input mode overrides⦠|
Callable runs when executed Β· Pure no exec pin, returns a value
PawnSwap 4
| Node | Type | Available on | Description |
|---|---|---|---|
| Get Manager Of Controller(Controller: Controller) β Pawn Swap Manager Component | Pure | Static | The Pawn Swap Manager of a controller. |
| Get Manager Of Pawn(Pawn: Pawn) β Pawn Swap Manager Component | Pure | Static | The Pawn Swap Manager of the controller that controls Pawn. |
| Get Pawn Profile(Pawn: Pawn) β Pawn Swap Pawn Component | Pure | Static | The Pawn Swap Profile of a pawn, or None. |
| Get Pawn Team Id(Pawn: Pawn, Controller: Controller) β Integer | Pure | Static | Team of a pawn: its profile Team Id, else the team of its controller's manager (or of Controller), else -1. |
Seats 12
| Node | Type | Available on | Description |
|---|---|---|---|
| Get Seats(Vehicle: Actor) β Array of Pawn Swap Seat Component | Pure | Static | Every Pawn Swap Seat of Vehicle sorted by Priority. |
| Get Driver Seat(Vehicle: Actor) β Pawn Swap Seat Component | Pure | Static | The first driver seat of Vehicle, or None. |
| Get Free Seat(Vehicle: Actor, Candidate: Pawn, Prefer Driver: Boolean) β Pawn Swap Seat Component | Pure | Static | The best free seat of Vehicle that Candidate may enter (driver first when Prefer Driver). |
| Get Occupants(Vehicle: Actor) β Array of Pawn | Pure | Static | Pawns seated in Vehicle. |
| Find Seat Of Pawn(Pawn: Pawn) β Pawn Swap Seat Component | Pure | Static | The seat Pawn sits in, or None. |
| Is Pawn Seated(Pawn: Pawn) β Boolean | Pure | Static | True when Pawn sits in a Pawn Swap Seat. |
| Enter Seat(Seat: Pawn Swap Seat Component) | Callable | Component | Enters Seat with the controlled pawn. |
| Enter Vehicle(Vehicle: Actor, Prefer Driver: Boolean) | Callable | Component | Enters the best free seat of Vehicle (driver first when Prefer Driver, then by Priority). |
| Exit Seat | Callable | Component | Leaves the current seat at a validated exit location. |
| Change Seat(New Seat: Pawn Swap Seat Component) | Callable | Component | Moves to another seat of the same vehicle (no exit check). |
| Get Current Seat() β Pawn Swap Seat Component | Pure | Component | The seat of the player's pawn, or None. |
| Is Seated() β Boolean | Pure | Component | True while the player's pawn is seated. |
Exit 2
| Node | Type | Available on | Description |
|---|---|---|---|
| Get Pawn Collision Size(Pawn: Pawn, Default Radius: Float, Default Half Height: Float) β Radius, Half Height | Pure | Static | Capsule radius and half height of a pawn (character capsule, else collision cylinder, else the defaults). |
| Is Capsule Free(Location: Vector, Radius: Float, Half Height: Float, Channel: Collision Channel, Ignore Actors: Array of Actor) β Boolean | Callable | Static | True when a capsule at Location overlaps nothing blocking on Channel (Ignore Actors are skipped). |
Save 3
| Node | Type | Available on | Description |
|---|---|---|---|
| Get Save Key(Actor: Actor) β Name | Pure | Static | Lookup key of an actor for save data: profile Roster Tag, else its first actor tag, else None. |
| Export State() β Pawn Swap Save Data | Callable | Component | Exports the roster, the active pawn and the seats occupied by roster pawns. |
| Restore State(Data: Pawn Swap Save Data, Restore Transforms: Boolean, Spawn Missing: Boolean) β Boolean | Callable | Component | Restores exported data (server): finds the pawns by Roster Tag or name (optionally respawning missing ones), optionally moves them, rebuilds the roster, re-seatβ¦ |
Switch 8
| Node | Type | Available on | Description |
|---|---|---|---|
| Switch To Pawn(New Pawn: Pawn) | Callable | Component | Possesses NewPawn with the switch blend. |
| Switch To Next | Callable | Component | Switches to the next roster pawn. |
| Switch To Previous | Callable | Component | Switches to the previous roster pawn. |
| Switch To Index(Index: Integer) | Callable | Component | Switches to the roster pawn at Index. |
| Switch To Tag(Tag: Name) | Callable | Component | Switches to the first roster pawn whose profile Roster Tag or actor tag is Tag. |
| Get Controlled Pawn() β Pawn | Pure | Component | The controlled pawn (a vehicle while driving). |
| Get Character Pawn() β Pawn | Pure | Component | The player's own pawn: the seated occupant while driving, otherwise the controlled pawn. |
| Get Owner Controller() β Controller | Pure | Component | The controller this manager is attached to. |
Roster 9
| Node | Type | Available on | Description |
|---|---|---|---|
| Register Pawn(In Pawn: Pawn) β Boolean | Callable | Component | Adds a pawn to the roster (server). |
| Unregister Pawn(In Pawn: Pawn) β Boolean | Callable | Component | Removes a pawn from the roster (server). |
| Clear Roster | Callable | Component | Empties the roster (server). |
| Get Roster() β Array of Pawn | Pure | Component | Roster pawns in order (replicated to the owning client). |
| Get Roster Count() β Integer | Pure | Component | Number of roster pawns. |
| Get Active Roster Index() β Integer | Pure | Component | Roster index of the player's pawn, or -1. |
| Is In Roster(In Pawn: Pawn) β Boolean | Pure | Component | True when InPawn is in the roster. |
| Find Roster Pawn By Tag(Tag: Name) β Pawn | Pure | Component | First roster pawn with this Roster Tag or actor tag. |
| Set Team Id(New Team Id: Integer) | Callable | Component | Sets the team id (server). |
Interaction 4
| Node | Type | Available on | Description |
|---|---|---|---|
| Find Best Interaction() β Pawn Swap Interaction | Callable | Component | Best seat or pawn within the interaction radius and view angle (or Exit while seated). |
| Interact() β Boolean | Callable | Component | Runs the best interaction: enters, takes over or exits. Returns false when there was nothing to do. |
| Interact With(Target: Pawn Swap Interaction) β Boolean | Callable | Component | Runs a given interaction result. |
| Get Current Interaction() β Pawn Swap Interaction | Pure | Component | Last result of the auto scan. |
Spectate 5
| Node | Type | Available on | Description |
|---|---|---|---|
| Spectate(Target: Actor) β Boolean | Callable | Component | Views Target without possessing it (owning client). Calling it again moves to another target. |
| Spectate Roster(Direction: Integer) β Boolean | Callable | Component | Spectates the next (Direction > 0) or previous roster pawn other than the controlled one. |
| Stop Spectating(Blend: Boolean) | Callable | Component | Returns the view to the controlled pawn. |
| Is Spectating() β Boolean | Pure | Component | |
| Get Spectate Target() β Actor | Pure | Component | The spectated actor, or None. |
Input 1
| Node | Type | Available on | Description |
|---|---|---|---|
| Apply Input Settings(Settings: Pawn Swap Input Settings) | Callable | Component | Applies an input mode and mouse cursor setting to the owning player controller (local controllers only). |
Profile 1
| Node | Type | Available on | Description |
|---|---|---|---|
| Get Pawn() β Pawn | Pure | Component | The pawn that owns this profile. |
Seat 9
| Node | Type | Available on | Description |
|---|---|---|---|
| Get Occupant() β Pawn | Pure | Component | The seated pawn, or None. |
| Is Occupied() β Boolean | Pure | Component | True when a pawn sits here. |
| Is Occupant Possessing Vehicle() β Boolean | Pure | Component | True when the occupant's controller drives (possesses) the vehicle. |
| Get Vehicle() β Actor | Pure | Component | The actor that owns this seat. |
| Get Vehicle Pawn() β Pawn | Pure | Component | The vehicle as a pawn (None for non-pawn mounts and props). |
| Get Sibling Seats() β Array of Pawn Swap Seat Component | Pure | Component | Every Pawn Swap Seat of the same vehicle (including this one), by Priority. |
| Seat Pawn(New Occupant: Pawn, Ignore Access: Boolean) β Pawn Swap Deny Reason | Callable | Component | Seats NewOccupant (server). Does not change possession; players should enter through the Pawn Swap Manager. |
| Unseat Pawn(Force Out When Blocked: Boolean) β Pawn Swap Deny Reason | Callable | Component | Unseats the occupant at a validated exit location (server). Force Out When Blocked leaves it at the seat instead of refusing. |
| Vacate Seat | Callable | Component | Removes the occupant without moving it (server). |
Access 6
| Node | Type | Available on | Description |
|---|---|---|---|
| Get Seat Owner() β Actor | Pure | Component | The owner used by Owner Only rules. |
| Check Access(Candidate: Pawn, Candidate Controller: Controller) β Pawn Swap Deny Reason | Pure | Component | Would Candidate (controlled by Candidate Controller) be allowed in? None = yes. |
| Set Locked(New Locked: Boolean) | Callable | Component | Locks or unlocks the seat (server). |
| Set Access(New Access: Pawn Swap Access) | Callable | Component | Changes the access rule (server). |
| Set Team Id(New Team Id: Integer) | Callable | Component | Changes the seat team (server). |
| Set Seat Owner(New Owner: Actor) | Callable | Component | Sets the owner for Owner Only rules: a controller, a player state or a pawn (server). None = unowned. |
Points 5
| Node | Type | Available on | Description |
|---|---|---|---|
| Get Point Transform(Point: Pawn Swap Seat Point) β Transform | Pure | Component | World transform of an entry or exit point. |
| Get Entry Transforms() β Array of Transform | Pure | Component | World transforms of all entry points (the seat transform when there are none). |
| Get Exit Transforms() β Array of Transform | Pure | Component | World transforms of all exit points (the entry points when there are none). |
| Get Nearest Entry Location(From: Vector) β Vector | Pure | Component | The entry point closest to From. |
| Find Exit Transform(For Pawn: Pawn) β Boolean, Out Transform | Callable | Component | Finds a free exit location for ForPawn: each exit point is snapped to the ground, tested with the pawn's capsule and checked for line of sight; then rings arounβ¦ |
Events & delegates
Bind these in Blueprint (drag off the object β Bind Event) or with AddDynamic in C++.
| Event | Parameters | Fires on | When it fires |
|---|---|---|---|
| On Pawn Switched | New Pawn (Pawn), Old Pawn (Pawn) | PawnSwapManagerComponent | The controlled pawn changed through PawnSwap (server and owning client). |
| On Setup Input | New Pawn (Pawn), Old Pawn (Pawn) | PawnSwapManagerComponent | Fired on the owning client right after a switch, after the input mode was applied: set up your input here. |
| On Seat Entered | Seat (Pawn Swap Seat Component), Seated Pawn (Pawn) | PawnSwapManagerComponent | A pawn of this player sat down (server and owning client). |
| On Seat Exited | Seat (Pawn Swap Seat Component), Seated Pawn (Pawn) | PawnSwapManagerComponent | A pawn of this player left a seat (server and owning client). |
| On Enter Denied | Reason (Pawn Swap Deny Reason), Seat (Pawn Swap Seat Component) | PawnSwapManagerComponent | An enter request was refused (server and owning client). |
| On Exit Denied | Reason (Pawn Swap Deny Reason), Seat (Pawn Swap Seat Component) | PawnSwapManagerComponent | An exit request was refused (server and owning client). |
| On Switch Denied | Reason (Pawn Swap Deny Reason), Target Pawn (Pawn) | PawnSwapManagerComponent | A switch request was refused (server and owning client). |
| On Spectate Changed | Target (Actor), Spectating (Boolean) | PawnSwapManagerComponent | Spectating started, moved to another target or stopped (owning client). |
| On Interaction Changed | Interaction (Pawn Swap Interaction) | PawnSwapManagerComponent | The best interaction changed (owning client, Auto Scan Interaction only). |
| On Swap Possessed | New Controller (Controller) | PawnSwapPawnComponent | A player's Pawn Swap Manager took this pawn (server and owning client). |
| On Swap Released | New Controller (Controller) | PawnSwapPawnComponent | A player's Pawn Swap Manager left this pawn (server and owning client). |
| On Occupant Changed | Seat (Pawn Swap Seat Component), New Occupant (Pawn), Previous Occupant (Pawn) | PawnSwapSeatComponent | Called on every machine when the occupant changes. |
Options & enums
| Enum | Values |
|---|---|
| Left Behind | Leave Unpossessed Spawn AI Controller Restore Original Controller |
| Seat Role | Driver Passenger |
| Access | Anyone Owner Only Same Team Owner Or Same Team |
| Deny Reason | None Invalid Target No Pawn No Authority Locked Not Owner Wrong Team Occupied Out Of Range Already Seated Not Seated Exit Blocked Controlled By Other Player Not In Roster Already Controlled Cooldown Custom Rule |
| Action | Switch Enter Exit |
| Input Mode | Unchanged Game Only Game And UI UI Only |
| Interaction Type | None Seat Pawn Exit |
Compatibility
One ready-made build per engine version is included in the download β copy the one that matches your project.
| Platform | Supported in |
|---|---|
| Windows | Editor & packaged |
| macOS | Editor & packaged |
| Module | Type | Loading phase |
|---|---|---|
| PawnSwap | Runtime | Default |
Technical details
| Code modules | PawnSwap (Runtime) |
|---|---|
| Blueprints | 0 Β· C++ classes: 4 |
| Network replicated | Yes |
| Development platforms | Windows: Yes, Mac: Yes |
| Target build platforms | Win64, Mac |
| Third-party software | No |
| Engine versions | Unreal Engine 4.27 Β· 5.8 β a build for each is included |
| C++ classes | 4 + 9 structs |
| Blueprint nodes | 69 |
| Events | 12 |
| Documentation | Documentation.html (in the download) |
| Download | PawnSwap.zip Β· 179 KB |
| Version | v1.0.0 |
What's in the download
| File | What it is |
|---|---|
| PawnSwap 4.27.zip | Plugin build for Unreal Engine 4.27 |
| PawnSwap 5.8.zip | Plugin build for Unreal Engine 5.8 |
| Documentation.html | Documentation (open in a browser) |
Quick start
- Unzip the download and pick the build that matches your engine (4.27 Β· 5.8).
- Copy the PawnSwap folder into your project's Plugins/ folder (create it if needed).
- Open the project, enable PawnSwap under Edit βΊ Plugins and restart the editor.
- Right-click in any Blueprint graph and search PawnSwap β or include the public headers from C++.
- Package for your target platform (Windows, macOS).
Good to know
Built and verified warning-free for Unreal Engine 4.27 and 5.8. C++ classes: Pawn Swap Manager (component for the PlayerController), Pawn Swap Seat (component for vehicles and mounts), Pawn Swap Profile (optional per-pawn component) and PawnSwap Library. Requests are server-authoritative (Server RPCs); seat occupancy, locks and access rules replicate, roster and current seat replicate to the owning client. Vehicles carrying seats must replicate. Spectating is a client-side view change. No content assets are included. The module is enabled for Win64 and Mac; the code is platform-independent engine C++ with no OS-specific calls. Developed and maintained by Alpha XP.
Everything included
- Pawn Swap Manager: possess another pawn on request, server-authoritative
- Smooth view-target blend on switch: blend time, blend function, exponent, lock outgoing
- Pawn roster: register, cycle next/previous, switch by index or tag, auto registration
- Seat component with entry and exit points (scene components or relative offsets)
- Multiple seats per vehicle: driver/passenger roles, priority, occupancy, possess theβ¦
- Exit validation: ground snap, capsule overlap, line of sight, ring and roof fallbackβ¦
- Left-behind controller policy: leave unpossessed, spawn AI controller, restoreβ¦
- Seated occupant: attach to seat or socket, offset, hide, collision/movement/rotationβ¦
- Interaction query: best seat or pawn by radius and view angle with prompt text, plusβ¦
- Seat locks and access rules: owner only, same team, owner or team, custom Blueprint rule
- Events: pawn switched, seat entered, seat exited, enter/exit/switch denied with aβ¦
- Multiplayer: Server RPCs, replicated seat occupancy with RepNotify, owner-only roster
- Spectate mode: view another pawn without possessing it, cycle the roster, return
- Input mode and mouse cursor per pawn, applied on switch, plus a Setup Input event
- Save/restore of roster and seat occupancy in a SaveGame-ready struct
- Blueprint function library: seats of a vehicle, free seat, occupants, teams, capsule tests
Platforms
Requirements
- Unreal Engine 4.27 and 5.8
- Develop on Windows (Win64)
- Blueprints and C++
In the download
Personal
One non-commercial project
- 1 activation seat
- 1 year of updates
- One end product
- Non-commercial use
- Community support
- 14-day refund window
Commercial
Ship paid products
- 5 activation seats
- 1 year of updates
- One paid end product
- Unlimited end users
- Priority support
- Source files
- 14-day refund window
Extended
Resell & white-label
- Unlimited activation seats
- Lifetime updates
- Unlimited end products
- White-label & resell
- 1-hour SLA
- Seat-free team use
- 14-day refund window
One purchase per product, no subscription. Each licence comes with a signed key β 1 seat on Personal, 5 seats on Commercial, unlimited seats on Extended. Paid licences can be refunded within 14 days from your order page.
- v1.0.0Latest
- Unreal Engine 4.27 and 5.8
- Blueprint and C++ API, HTML documentation
Be the first to review PawnSwap β reviews come from customers who bought it, so every one is a verified purchase.
Frequently asked
How do I get the files after paying?
Straight after checkout you land on your order page with the download button and your licence key. A receipt is emailed to you, and every order stays in My library.
Which licence do I need?
Personal β One non-commercial project. Commercial β Ship paid products. Extended β Resell & white-label. The Licences tab compares them side by side.
On how many devices can I activate it?
1 seat on Personal, 5 seats on Commercial, unlimited seats on Extended.
How long do I get updates?
Personal: 1 year of updates, Commercial: 1 year of updates, Extended: lifetime updates, counted from your purchase.
Can I get a refund?
Yes β paid licences can be refunded within 14 days, straight from your order page.
Is the download safe?
The file was scanned with ClamAV when it was published. Its SHA-256 checksum is listed under Features β In the download, so you can verify the file you receive.
Do I need an account?
No. Checkout only needs your email. Signing in keeps all your purchases, keys and downloads together in My library.
More like this
AudioLens
Real-time audio analysis: FFT spectrum, onset and beat detection, and a full set of time- and frequency-domain descriptors..
β β β β β No reviews yetTTechHarbour$14.00BlueprintTCP
BlueprintTCP lets you connect to any TCP server and exchange data entirely from Blueprints β no C++ and no networking boilerplate.
β β β β β No reviews yetTTechHarbour$12.99BluetoothLink
Bluetooth Low Energy for Unreal - scan, connect, read, write and subscribe to BLE devices on Android and iOS.
β β β β β No reviews yetTTechHarbour$11.99ClusterLink
SocketCluster realtime client for Unreal - pub/sub channels, auth engine and JSON codec, usable from Blueprints.
β β β β β No reviews yetTTechHarbour$11.99