💻 Coding
Unreal Engine 5.4 C++ Actor from a Gameplay Brief (Enhanced Input, No Find in Tick; 5.4 vs 5.3 Fork)
Write an Unreal Engine 5.4 C++ actor from a gameplay brief. Use Enhanced Input. Do not Find in Tick. Fork 5.4 vs 5.3 APIs.
0Reviews
Prompt
Act as an Unreal Engine C++ sketcher who only uses a pasted gameplay brief. You write one Actor class for Unreal Engine 5.4 (or the locked version). You use Enhanced Input mapping contexts. You do not call UGameplayStatics::GetActorOfClass, FindObject, or TActorIterator inside Tick. This is not a Unity MonoBehaviour, not a Godot node, and not a Blueprint-only dump. You work only from Inputs. Do not invent stats, citations, quotes, URLs, names, IDs, or records that are not in Inputs. Inputs: - Gameplay brief (what the actor does, component names I allow): [Brief] - Unreal version I lock (5.4 / 5.3 / UNKNOWN): [Version] - Enhanced Input actions I allow: [Actions] - Actor class name I allow: [Type] - Component pointers I may cache in BeginPlay: [Paths] - Words I must not use: [Banned] - What I must never invent: [Never] - Output format: [Format] - Language for comments: [Lang] - Fork notes I require (5.4 vs 5.3): [Fork] Generate: 1. Honesty ledger: Brief, Version, Actions, Type, Paths, Fork, Lang. Forbidden: extra actions, extra component names, plugin versions not locked. 2. Version fork: if Version is 5.4, use 5.4 Enhanced Input includes. If 5.3, do not use 5.4-only APIs; mark them. If UNKNOWN, write VERSION UNKNOWN and do not pick 5.4 by default in comments. 3. Header and cpp sketch: one actor. UCLASS. Cache Paths in BeginPlay only. No Find in Tick. 4. Input: bind only Actions via Enhanced Input. If an action is needed and not listed, write NOT IN INPUTS rather than adding Jump. 5. Refuse: Unity Input.GetAxis, GameObject.Find, GetComponent in Update, Godot get_node in _process. 6. Comments: Lang. Each cached pointer quoted from Paths. 7. Never: invent a GameInstance singleton name, an extra plugin, or a 5.5 API if Version is 5.4 or 5.3. 8. Compliance pass: cut Banned and Never. Print that Version is quoted or UNKNOWN. Format as Format. Constraints: - Unreal C++ actor from Brief. Not a Unity MonoBehaviour and not a full project. - No Find, GetActorOfClass, or TActorIterator in Tick. - Only Actions and Paths named in Inputs. - Honor the 5.4 vs 5.3 fork. - No emojis.
Instructions
Replace every [bracket] with your details before running. Works on ChatGPT, Claude, and Gemini.
Examples
Example Input
Brief: top-down 3D courier; ACharacter named ACourierPawn; move on floor; overlap a pickup volume named ParcelPickup; deliver to a target named DropZone. Speed 180 as pasted. No jump. No camera pawn. Version: Unreal Engine 5.4 (do not use 5.5 APIs; do not invent 5.3-only workarounds as the lock) Actions: IA_Move, IA_Interact Type: ACourierPawn Paths: ParcelPickup as ATriggerVolume* cached in BeginPlay; DropZone as AActor* cached in BeginPlay. Both names pasted. Banned: Find in Tick, GetActorOfClass in Tick, Input.GetAxis, GameObject.Find Never: invent Jump action, invent a GameInstance name, invent a C# class Format: ledger + fork + header/cpp sketch + refuse + gaps Lang: English comments Fork: 5.4 Enhanced Input as pasted; 5.3 would keep Enhanced Input but skip 5.4-only motion matching notes; that fork is not this lock
Example Output
1. Ledger. ACourierPawn ACharacter. Speed 180 as pasted. ParcelPickup ATriggerVolume* cached BeginPlay. DropZone AActor* cached BeginPlay. Actions: IA_Move, IA_Interact. Version Unreal Engine 5.4. Type ACourierPawn. Lang English. Forbidden: Jump, GameInstance invent, C# class, Find in Tick, GetActorOfClass in Tick, Input.GetAxis, GameObject.Find, 5.5 API, camera pawn.
2. Fork. Version 5.4 quoted. Enhanced Input includes as 5.4. 5.5 API refused. If this were 5.3: keep Enhanced Input binds, skip any 5.4-only motion-matching comment, and mark that fork; that fork is NOT THIS LOCK.
3. Sketch (not a compile-ready module).
// ACourierPawn.h Version: UE 5.4 as pasted
UCLASS() class ACourierPawn : public ACharacter {
GENERATED_BODY()
public:
virtual void BeginPlay() override;
virtual void Tick(float DeltaTime) override;
void Move(const FInputActionValue& Value); // IA_Move only
void Interact(const FInputActionValue& Value); // IA_Interact only
private:
UPROPERTY() ATriggerVolume* ParcelPickup = nullptr; // cached BeginPlay from Paths
UPROPERTY() AActor* DropZone = nullptr; // cached BeginPlay from Paths
};
// ACourierPawn.cpp
void ACourierPawn::BeginPlay() {
Super::BeginPlay();
// Cache Paths only. Do not Find in Tick.
ParcelPickup = /* named ParcelPickup as pasted; lookup once here */;
DropZone = /* named DropZone as pasted; lookup once here */;
// Bind IA_Move and IA_Interact only. Jump NOT IN INPUTS.
}
void ACourierPawn::Tick(float DeltaTime) {
Super::Tick(DeltaTime);
// Use cached ParcelPickup and DropZone. No GetActorOfClass. No TActorIterator. No FindObject.
// Speed 180 as pasted when applying movement from IA_Move.
}
4. Input. IA_Move and IA_Interact only. Jump NOT IN INPUTS. Unity Input.GetAxis refused.
5. Refuse. GameObject.Find: refused. GetComponent in Update: refused. Godot get_node in _process: refused. Find in Tick: refused.
6. Comments. English. Pointers quote Paths. Speed 180 quoted.
7. Never. No GameInstance invent. No 5.5 API. No C# MonoBehaviour.
8. Compliance. Version 5.4 quoted. Banned cut. Format ledger+fork+sketch+refuse+gaps. Gaps: module name, mapping context asset path, collision profile, mesh, input deadzone.
Missing-data policy: if a field was blank, write NOT IN INPUTS rather than guessing. Lock any tool version named in Inputs; if unnamed, write unknown. No invented testimonials, star ratings, or press logos. If legal, clinical, insurance, HR, education-plan, or veterinary content appears, add a one-line not-advice and de-identify banner. Quote banned-word hits and cut them. End with a gaps list of five bullets the user still owes you. Character and byte caps in the job are hard; print counts when relevant. Refuse to backfill DOIs, exam dumps, PHI, PII, or compensation promises not in Inputs.