C++ reference
From 1.0.0 onwards, everything on this page changes only in a MAJOR release, with a migration note in the changelog.
Headers
#include "Components/EDRiderComponent.h"
#include "Components/EDMountableComponent.h"
#include "Components/EDMountPointComponent.h"
#include "Data/EDMountAnimationSet.h"
#include "Interfaces/EDMountableInterface.h"
#include "Interfaces/EDRiderInterface.h"
#include "Query/EDMountingSubsystem.h"
#include "System/EDMountingLibrary.h"
#include "System/EDMountingSettings.h"
#include "System/EDMountingTags.h"
#include "System/EDMountingTypes.h"
#include "Animation/EDMountAnimNotify.h"
UEDRiderComponent
static UEDRiderComponent* FindRiderComponent(AActor* Actor);
FEDMountResult RequestMount(AActor* MountActor);
FEDMountResult RequestMountWithOptions(const FEDMountRequest& Request);
FEDMountResult RequestMountNearest();
FEDMountResult RequestDismount();
FEDMountResult RequestChangeSeat(FEDSeatHandle TargetSeat);
FEDMountResult RequestShuffleSeat(bool bForward = true);
void ForceDismount(); // authority only
EEDMountPhase GetMountPhase() const;
bool IsMounted() const;
bool IsSeated() const;
bool IsTransitioning() const;
bool IsDriver() const;
AActor* GetMountActor() const;
FEDSeatHandle GetSeatHandle() const;
FGameplayTag GetEntryTag() const;
UEDMountableComponent* GetMountable() const;
UEDMountPointComponent* GetSeatComponent() const;
USceneComponent* GetSeatCameraComponent() const;
void ApplyDriveInput(const FVector2D& MoveInput, float Throttle, float Brake, bool bHandbrake);
void HandleMountEvent(FGameplayTag EventTag);
TSoftObjectPtr<UEDMountAnimationSet> AnimationSet;
EEDTransitionMode TransitionMode;
FEDMountQuery DefaultQuery;
FEDMountPhaseChangedSignature OnMountPhaseChanged;
FEDMountFailedSignature OnMountFailed;
FEDMountEventSignature OnMountEvent;
UEDMountableComponent
bool IsMountable() const;
void SetMountable(bool bNewMountable); // authority only
float GetMountDistance() const;
void GetSeatHandles(TArray<FEDSeatHandle>& OutHandles) const;
int32 GetNumSeats() const;
int32 GetNumOccupiedSeats() const;
UEDMountPointComponent* GetSeatComponent(FEDSeatHandle Handle) const;
FEDSeatHandle FindSeatByName(FName SeatName) const;
FEDSeatHandle GetDriverSeat() const;
FEDSeatHandle FindSeatOf(const APawn* Rider) const;
APawn* GetOccupant(FEDSeatHandle Handle) const;
APawn* GetDriver() const;
void GetRiders(TArray<APawn*>& OutRiders) const;
bool IsSeatFree(FEDSeatHandle Handle) const;
bool HasFreeSeat() const;
FTransform GetSeatWorldTransform(FEDSeatHandle Handle) const;
bool CanRiderUseSeat(const APawn* Rider, FEDSeatHandle Handle,
const FGameplayTagContainer& ContextTags, EEDMountFailure& OutFailure) const;
FEDSeatHandle FindBestSeatFor(const APawn* Rider, const FEDMountRequest& Request,
EEDMountFailure& OutFailure) const;
void EjectAllRiders(); // authority only
FGameplayTagContainer MountTags;
float MountDistanceOverride;
TSoftObjectPtr<UEDMountAnimationSet> MountAnimationSet;
bool bEjectRidersOnDestroy;
FEDSeatOccupancyChangedSignature OnSeatOccupancyChanged;
FEDMountEventSignature OnMountEvent;
FEDMountableChangedSignature OnMountableChanged;
Not for gameplay
ReserveSeat, OccupySeat and ReleaseSeat are public C++ because the rider component needs them.
Calling them yourself desynchronises the rider's state from the seat's.
UEDMountPointComponent
Every UPROPERTY on it is public API — see Seats. Plus:
FEDSeatHandle GetSeatHandle() const;
UEDMountableComponent* GetMountable() const;
FTransform GetSeatTransform() const;
FName GetEffectiveSeatName() const;
bool IsDriverSeat() const;
void GetEffectiveEntryPoints(TArray<FEDEntryPoint>& OutEntryPoints) const;
FTransform GetEntryPointTransform(const FEDEntryPoint& EntryPoint) const;
bool FindBestEntryPoint(const FVector& RiderLocation, bool bForExit, const APawn* IgnoredPawn,
FGameplayTag PreferredSide,
FEDEntryPoint& OutEntryPoint, FTransform& OutWorldTransform) const;
bool IsEntryPointClear(const FEDEntryPoint& EntryPoint, bool bForExit, const APawn* IgnoredPawn) const;
UEDMountAnimationSet* ResolveAnimationSet(const UEDMountAnimationSet* RiderSet) const;
FEDRiderPolicy ResolveRiderPolicy() const;
EEDPossessionPolicy ResolvePossessionPolicy() const;
USceneComponent* GetSeatCameraComponent() const;
FGameplayTag DeriveSideTag(const FVector& WorldLocation) const;
UEDMountingSubsystem
static UEDMountingSubsystem* Get(const UObject* WorldContextObject);
bool FindBestMount(const APawn* Rider, const FEDMountQuery& Query, FEDMountCandidate& OutCandidate) const;
void FindMountCandidates(const APawn* Rider, const FEDMountQuery& Query, TArray<FEDMountCandidate>& Out) const;
void GetRegisteredMountables(TArray<UEDMountableComponent*>& OutMountables) const;
int32 GetNumRegisteredMountables() const;
UEDMountAnimationSet
TArray<FEDMountAnimEntry> Entries;
FName MontageSlot; // "DefaultSlot"
UAnimMontage* ResolveMontage(const FEDMountAnimContext& Context, FEDMountAnimEntry& OutEntry) const;
bool ResolveEntry(const FEDMountAnimContext& Context, FEDMountAnimEntry& OutEntry) const; // no load
bool HasMontageFor(const FEDMountAnimContext& Context) const;
void PreloadAsync();
void ReleasePreload();
Interfaces
// IEDMountableInterface
bool CanAcceptRider(APawn* Rider, FEDSeatHandle Seat, const FGameplayTagContainer& ContextTags) const;
void OnRiderSeated(APawn* Rider, FEDSeatHandle Seat);
void OnRiderLeft(APawn* Rider, FEDSeatHandle Seat);
void SetSeatDoorOpen(FEDSeatHandle Seat, bool bOpen);
void ApplyDriverInput(APawn* Driver, const FVector2D& MoveInput, float Throttle, float Brake, bool bHandbrake);
// IEDRiderInterface
void GetRiderTags(FGameplayTagContainer& OutTags) const;
USkeletalMeshComponent* GetRiderMesh() const;
void OnMountPhaseChanged(EEDMountPhase NewPhase, EEDMountPhase OldPhase, AActor* MountActor, FEDSeatHandle Seat);
All BlueprintNativeEvent, all with working defaults.
Versioning
Adding an enumerator is MINOR; renaming or removing one is MAJOR. Adding a struct field is MINOR;
reordering, renaming or moving a struct between modules is MAJOR — and a struct move also needs a
CoreRedirects note, because otherwise assets lose that data silently.
Explicitly not public
- Anything under
Private/. EDMountingTestsin its entirety.- The editor module's visualizer and details customization. They are tooling; their shape can change.
- Console variables. They are debugging aids and may come and go.
- Log formatting. Do not parse it.