{"id":"7c7b0bb3-2746-4b55-98ec-74a5db2106e3","shortId":"SDxMhd","kind":"skill","title":"ue5-cpp-gameplay","tagline":"UE5.6/UE5.7 gameplay C++ implementation for Actors, Components, DataAssets, and gameplay logic. Use when requests ask to write .h/.cpp pairs, expose UPROPERTY/UFUNCTION to Blueprint, use GameplayTags, or build reusable component-based systems.","description":"# Quick Start\n- Confirm target class type (`AActor`, `UActorComponent`, `UObject`, `USaveGame`, etc.).\n- Define required Blueprint-facing API before implementation.\n- Output both header and source files together.\n\n# UE5.7 API Anchors\n- Reflection and UObject anchors:\n  - `UCLASS`, `USTRUCT`, `UENUM`, `UINTERFACE`, `GENERATED_BODY()`\n  - `UPROPERTY(...)`, `UFUNCTION(...)`\n- Core gameplay type anchors:\n  - `AActor`, `UActorComponent`, `UDataAsset`, `UGameInstanceSubsystem`\n  - `TObjectPtr<>` in headers and `TSubclassOf<>` for class references\n- Replication anchors:\n  - `GetLifetimeReplicatedProps(...)`\n  - `DOREPLIFETIME(...)` in `Net/UnrealNetwork.h`\n  - `ReplicatedUsing=OnRep_*`, `UFUNCTION(Server/Client/NetMulticast, ...)`\n- Gameplay tag anchors:\n  - `FGameplayTag`, `FGameplayTagContainer`\n  - explicit tag request/match checks with safe fallback behavior\n\n# Implementation Stage Contract\n- Every gameplay C++ task must define:\n  - Public header API surface (Blueprint/API visibility)\n  - Private runtime implementation path (`.cpp`)\n  - Ownership/lifetime model (constructor, init, teardown)\n  - Network authority rules (single-player only or replicated flow)\n  - Validation method (compile assumptions, usage examples, edge-case behavior)\n- If any item is missing, the implementation spec is incomplete.\n\n# Workflow\n## 1) Type and File Shape\n- Create type declarations with Unreal macros and UE5 pointer conventions (`TObjectPtr` in headers).\n- Produce paired `.h` and `.cpp` with forward declarations in header and concrete includes in source.\n- Keep class responsibility narrow and reusable.\n\n## 2) Public API Design\n- Define Blueprint API (`BlueprintCallable`, `BlueprintPure`, categories, metadata) before implementation.\n- Expose minimal callable surface; keep helper methods non-UFUNCTION unless needed.\n- Declare clear input/output contracts and failure behavior.\n\n## 3) Runtime Implementation\n- Implement logic in `.cpp` with null checks, authority guards, and explicit branch behavior.\n- Keep tick usage opt-in; prefer event-driven updates.\n- Handle initialization order (`BeginPlay`, `InitializeComponent`, or subsystem init) explicitly.\n\n## 4) Replication and RPC (When Needed)\n- Add replicated properties and `OnRep_*` handlers only for true client-visible state.\n- Register properties in `GetLifetimeReplicatedProps(...)` with `DOREPLIFETIME(...)`.\n- Use server-authoritative RPC entry points for client requests.\n\n## 5) GameplayTags and Data-Driven Hooks\n- Use `FGameplayTag`/`FGameplayTagContainer` with explicit tag names.\n- Validate required tags at runtime and provide fallback for missing tags.\n- Prefer DataAsset-driven config for tunables over hard-coded constants.\n\n## 6) Validation Output\n- Ensure output includes both files and required includes.\n- Confirm Blueprint exposure, replication behavior, and error-handling paths are documented.\n- Provide usage snippet or invocation flow when behavior is non-trivial.\n\n# Constraints\n- Always provide matching `.h` and `.cpp` when creating a class.\n- Use non-deprecated APIs compatible with UE5.6/UE5.7.\n- Keep includes minimal; use forward declarations in headers.\n- Avoid hardcoded asset paths unless explicitly requested.\n- Prefer `TObjectPtr<>` in UPROPERTY object references in headers.\n- Keep server-authoritative checks explicit for any network-affecting gameplay action.\n\n# Failure Handling\n- Symptom: class compiles but is missing from Blueprint.\n  - Locate: missing `BlueprintType`/`Blueprintable`/`BlueprintCallable` metadata.\n  - Fix: add required reflection specifiers and regenerate project files/build.\n- Symptom: unresolved symbol or include cycles.\n  - Locate: header include graph and forward declaration misuse.\n  - Fix: move heavy includes to `.cpp`, keep forward declarations in headers.\n- Symptom: replicated property does not update on clients.\n  - Locate: `GetLifetimeReplicatedProps(...)` and actor/component replication flags.\n  - Fix: register with `DOREPLIFETIME(...)`, ensure owning actor replicates.\n- Symptom: `OnRep_*` never fires.\n  - Locate: property write path and net role.\n  - Fix: mutate on server authority path and verify property actually changes.\n- Symptom: RPC callable but ignored at runtime.\n  - Locate: RPC specifier and call site authority.\n  - Fix: enforce client->server request path and server-side validation.\n- Symptom: GameplayTag logic silently fails.\n  - Locate: invalid tag names or missing tag config.\n  - Fix: validate tags on startup and guard with explicit fallback behavior.\n\n# UE5.6 / UE5.7 Compatibility Notes\n- Reflection, replication, and GameplayTag APIs above are stable across UE5.6 and UE5.7.\n- Favor stable core APIs over editor-only helpers when runtime behavior is required.\n\n# Escalation\n- Escalate when user asks for plugin/module-level refactor beyond a single gameplay class.\n- Escalate when solution needs custom engine source modifications.","tags":["ue5","cpp","gameplay","unrealengine5","skills","teixasalone","aec","agent-skills","animations","blender","camera","collisions"],"capabilities":["skill","source-teixasalone","skill-ue5-cpp-gameplay","topic-aec","topic-agent-skills","topic-animations","topic-blender","topic-camera","topic-collisions","topic-computer-vision","topic-dotnet","topic-embodied-ai","topic-game-framework","topic-gaussian-splatting","topic-graphics"],"categories":["UnrealEngine5-Skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/teixasalone/UnrealEngine5-Skills/ue5-cpp-gameplay","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add teixasalone/UnrealEngine5-Skills","source_repo":"https://github.com/teixasalone/UnrealEngine5-Skills","install_from":"skills.sh"}},"qualityScore":"0.456","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 12 github stars · SKILL.md body (4,900 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:07:25.697Z","embedding":null,"createdAt":"2026-05-10T01:06:36.984Z","updatedAt":"2026-05-18T19:07:25.697Z","lastSeenAt":"2026-05-18T19:07:25.697Z","tsv":"'1':173 '2':212 '3':244 '4':280 '5':315 '6':352 'aactor':43,82 'across':597 'action':441 'actor':10,512 'actor/component':503 'actual':534 'add':286,459 'affect':439 'alway':388 'anchor':65,69,81,95,106 'api':53,64,128,214,218,402,593,604 'ask':19,619 'asset':416 'assumpt':155 'author':143,254,529,549 'authorit':308,432 'avoid':414 'base':35 'beginplay':274 'behavior':116,161,243,259,367,382,584,612 'beyond':623 'blueprint':27,51,217,364,451,455 'blueprint-fac':50 'blueprint/api':130 'blueprintcal':219,456 'blueprintpur':220 'blueprinttyp':454 'bodi':75 'branch':258 'build':31 'c':7,122 'call':547 'callabl':227,538 'case':160 'categori':221 'chang':535 'check':112,253,433 'class':41,92,207,397,445,627 'clear':238 'client':296,313,499,552 'client-vis':295 'code':350 'compat':403,587 'compil':154,446 'compon':11,34 'component-bas':33 'concret':202 'config':344,573 'confirm':39,363 'constant':351 'constraint':387 'constructor':139 'contract':119,240 'convent':187 'core':78,603 'cpp':3,136,195,250,393,486 'creat':178,395 'custom':632 'cycl':472 'data':319 'data-driven':318 'dataasset':12,342 'dataasset-driven':341 'declar':180,198,237,411,479,489 'defin':48,125,216 'deprec':401 'design':215 'document':374 'doreplifetim':97,304,509 'driven':269,320,343 'edg':159 'edge-cas':158 'editor':607 'editor-on':606 'enforc':551 'engin':633 'ensur':355,510 'entri':310 'error':370 'error-handl':369 'escal':615,616,628 'etc':47 'event':268 'event-driven':267 'everi':120 'exampl':157 'explicit':109,257,279,326,419,434,582 'expos':24,225 'exposur':365 'face':52 'fail':565 'failur':242,442 'fallback':115,336,583 'favor':601 'fgameplaytag':107,323 'fgameplaytagcontain':108,324 'file':61,176,359 'files/build':466 'fire':517 'fix':458,481,506,525,550,574 'flag':505 'flow':151,380 'forward':197,410,478,488 'gameplay':4,6,14,79,104,121,440,626 'gameplaytag':29,316,562,592 'generat':74 'getlifetimereplicatedprop':96,302,501 'graph':476 'guard':255,580 'h':193,391 'h/.cpp':22 'handl':271,371,443 'handler':291 'hard':349 'hard-cod':348 'hardcod':415 'header':58,88,127,190,200,413,428,474,491 'heavi':483 'helper':230,609 'hook':321 'ignor':540 'implement':8,55,117,134,168,224,246,247 'includ':203,357,362,407,471,475,484 'incomplet':171 'init':140,278 'initi':272 'initializecompon':275 'input/output':239 'invalid':567 'invoc':379 'item':164 'keep':206,229,260,406,429,487 'locat':452,473,500,518,543,566 'logic':15,248,563 'macro':183 'match':390 'metadata':222,457 'method':153,231 'minim':226,408 'miss':166,338,449,453,571 'misus':480 'model':138 'modif':635 'move':482 'must':124 'mutat':526 'name':328,569 'narrow':209 'need':236,285,631 'net':523 'net/unrealnetwork.h':99 'network':142,438 'network-affect':437 'never':516 'non':233,385,400 'non-deprec':399 'non-trivi':384 'non-ufunct':232 'note':588 'null':252 'object':425 'onrep':101,290,515 'opt':264 'opt-in':263 'order':273 'output':56,354,356 'own':511 'ownership/lifetime':137 'pair':23,192 'path':135,372,417,521,530,555 'player':147 'plugin/module-level':621 'point':311 'pointer':186 'prefer':266,340,421 'privat':132 'produc':191 'project':465 'properti':288,300,494,519,533 'provid':335,375,389 'public':126,213 'quick':37 'refactor':622 'refer':93,426 'reflect':66,461,589 'regener':464 'regist':299,507 'replic':94,150,281,287,366,493,504,513,590 'replicatedus':100 'request':18,314,420,554 'request/match':111 'requir':49,330,361,460,614 'respons':208 'reusabl':32,211 'role':524 'rpc':283,309,537,544 'rule':144 'runtim':133,245,333,542,611 'safe':114 'server':307,431,528,553,558 'server-authorit':306,430 'server-sid':557 'server/client/netmulticast':103 'shape':177 'side':559 'silent':564 'singl':146,625 'single-play':145 'site':548 'skill' 'skill-ue5-cpp-gameplay' 'snippet':377 'solut':630 'sourc':60,205,634 'source-teixasalone' 'spec':169 'specifi':462,545 'stabl':596,602 'stage':118 'start':38 'startup':578 'state':298 'subsystem':277 'surfac':129,228 'symbol':469 'symptom':444,467,492,514,536,561 'system':36 'tag':105,110,327,331,339,568,572,576 'target':40 'task':123 'teardown':141 'tick':261 'tobjectptr':86,188,422 'togeth':62 'topic-aec' 'topic-agent-skills' 'topic-animations' 'topic-blender' 'topic-camera' 'topic-collisions' 'topic-computer-vision' 'topic-dotnet' 'topic-embodied-ai' 'topic-game-framework' 'topic-gaussian-splatting' 'topic-graphics' 'trivial':386 'true':294 'tsubclassof':90 'tunabl':346 'type':42,80,174,179 'uactorcompon':44,83 'uclass':70 'udataasset':84 'ue5':2,185 'ue5-cpp-gameplay':1 'ue5.6':585,598 'ue5.6/ue5.7':5,405 'ue5.7':63,586,600 'uenum':72 'ufunct':77,102,234 'ugameinstancesubsystem':85 'uinterfac':73 'unless':235,418 'unreal':182 'unresolv':468 'uobject':45,68 'updat':270,497 'uproperti':76,424 'uproperty/ufunction':25 'usag':156,262,376 'usavegam':46 'use':16,28,305,322,398,409 'user':618 'ustruct':71 'valid':152,329,353,560,575 'verifi':532 'visibl':131,297 'workflow':172 'write':21,520","prices":[{"id":"c08383d1-96a7-4701-a7f9-884f4c9a4800","listingId":"7c7b0bb3-2746-4b55-98ec-74a5db2106e3","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"teixasalone","category":"UnrealEngine5-Skills","install_from":"skills.sh"},"createdAt":"2026-05-10T01:06:36.984Z"}],"sources":[{"listingId":"7c7b0bb3-2746-4b55-98ec-74a5db2106e3","source":"github","sourceId":"teixasalone/UnrealEngine5-Skills/ue5-cpp-gameplay","sourceUrl":"https://github.com/teixasalone/UnrealEngine5-Skills/tree/main/skills/ue5-cpp-gameplay","isPrimary":false,"firstSeenAt":"2026-05-10T01:06:36.984Z","lastSeenAt":"2026-05-18T19:07:25.697Z"}],"details":{"listingId":"7c7b0bb3-2746-4b55-98ec-74a5db2106e3","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"teixasalone","slug":"ue5-cpp-gameplay","github":{"repo":"teixasalone/UnrealEngine5-Skills","stars":12,"topics":["2d","aec","agent-skills","animations","blender","camera","collisions","computer-vision","dotnet","embodied-ai","game-framework","gaussian-splatting","graphics","machine-learning","ue4-program","unreal-engine","virtual-worlds","webgl","webgl2","webxr"],"license":"mit","html_url":"https://github.com/teixasalone/UnrealEngine5-Skills","pushed_at":"2026-05-18T15:42:31Z","description":"Provide reusable workflows for Unreal Engine 5.6/5.7 to simplify Blueprint, C++, UI, PCG, replication, debugging, and performance tasks.","skill_md_sha":"ac0ca322ef34753197ee37ed4c4f5ad3f412ab6b","skill_md_path":"skills/ue5-cpp-gameplay/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/teixasalone/UnrealEngine5-Skills/tree/main/skills/ue5-cpp-gameplay"},"layout":"multi","source":"github","category":"UnrealEngine5-Skills","frontmatter":{"name":"ue5-cpp-gameplay","description":"UE5.6/UE5.7 gameplay C++ implementation for Actors, Components, DataAssets, and gameplay logic. Use when requests ask to write .h/.cpp pairs, expose UPROPERTY/UFUNCTION to Blueprint, use GameplayTags, or build reusable component-based systems."},"skills_sh_url":"https://skills.sh/teixasalone/UnrealEngine5-Skills/ue5-cpp-gameplay"},"updatedAt":"2026-05-18T19:07:25.697Z"}}