{
  "schemaVersion": "1.0",
  "item": {
    "slug": "unreal-engine",
    "name": "Unreal Engine",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/ivangdavila/unreal-engine",
    "canonicalUrl": "https://clawhub.ai/ivangdavila/unreal-engine",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/unreal-engine",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=unreal-engine",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/unreal-engine"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/unreal-engine",
    "agentPageUrl": "https://openagent3.xyz/skills/unreal-engine/agent",
    "manifestUrl": "https://openagent3.xyz/skills/unreal-engine/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/unreal-engine/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Garbage Collection",
        "body": "Raw pointers to UObjects get garbage collected — use UPROPERTY() to prevent\nUPROPERTY() marks for GC tracking — without it, pointer becomes dangling\nTWeakObjectPtr for optional references — doesn't prevent collection, check IsValid()\nNewObject<T>() for UObjects — never raw new, GC won't track it"
      },
      {
        "title": "UPROPERTY and UFUNCTION",
        "body": "UPROPERTY() required for Blueprint access — and for GC tracking\nUFUNCTION() for Blueprint callable/events — also required for replication\nEditAnywhere vs VisibleAnywhere — edit allows changes, visible is read-only\nBlueprintReadWrite vs BlueprintReadOnly — controls Blueprint access level"
      },
      {
        "title": "Actor Lifecycle",
        "body": "BeginPlay after all components initialized — safe to access components\nConstructor runs on CDO (Class Default Object) — don't spawn actors or access world\nPostInitializeComponents before BeginPlay — for component setup\nEndPlay for cleanup — called on destroy and level transition"
      },
      {
        "title": "Tick Performance",
        "body": "Disable tick when not needed — PrimaryActorTick.bCanEverTick = false\nUse timers instead of tick + counter — GetWorldTimerManager().SetTimer()\nTick groups for ordering — PrePhysics, DuringPhysics, PostPhysics\nBlueprint tick expensive — move hot logic to C++"
      },
      {
        "title": "Replication",
        "body": "Server is authority — clients request, server validates and replicates\nUPROPERTY(Replicated) for variable sync — implement GetLifetimeReplicatedProps\nUFUNCTION(Server) for client-to-server RPC — must be Reliable or Unreliable\nHasAuthority() to check if server — before executing authoritative logic\nRole and RemoteRole for network role checks — ROLE_Authority is server"
      },
      {
        "title": "Asset References",
        "body": "Hard references load with parent — bloats memory, use for always-needed\nSoft references (TSoftObjectPtr) load on demand — for optional or large assets\nLoadSynchronous() or AsyncLoad for soft refs — don't access until loaded\nBlueprint class references: TSubclassOf<T> — type-safe class selection"
      },
      {
        "title": "Memory and Pointers",
        "body": "TSharedPtr for non-UObjects — reference counted, auto-deletes\nTUniquePtr for exclusive ownership — can't copy, moves only\nMakeShared<T>() for creation — single allocation for object and control block\nNever mix raw new/delete with smart pointers — choose one pattern"
      },
      {
        "title": "Common Mistakes",
        "body": "Accessing null actor in Blueprint — use IsValid() node before access\nPIE (Play In Editor) vs packaged build differ — test shipping build\nHot reload corrupts Blueprints — close editor, build, reopen\nGetWorld() null in constructor — world doesn't exist yet, use BeginPlay\nSpawning in constructor crashes — defer to BeginPlay or later\nFString for display, FName for identifiers — FName is hashed, faster comparison"
      }
    ],
    "body": "Garbage Collection\nRaw pointers to UObjects get garbage collected — use UPROPERTY() to prevent\nUPROPERTY() marks for GC tracking — without it, pointer becomes dangling\nTWeakObjectPtr for optional references — doesn't prevent collection, check IsValid()\nNewObject<T>() for UObjects — never raw new, GC won't track it\nUPROPERTY and UFUNCTION\nUPROPERTY() required for Blueprint access — and for GC tracking\nUFUNCTION() for Blueprint callable/events — also required for replication\nEditAnywhere vs VisibleAnywhere — edit allows changes, visible is read-only\nBlueprintReadWrite vs BlueprintReadOnly — controls Blueprint access level\nActor Lifecycle\nBeginPlay after all components initialized — safe to access components\nConstructor runs on CDO (Class Default Object) — don't spawn actors or access world\nPostInitializeComponents before BeginPlay — for component setup\nEndPlay for cleanup — called on destroy and level transition\nTick Performance\nDisable tick when not needed — PrimaryActorTick.bCanEverTick = false\nUse timers instead of tick + counter — GetWorldTimerManager().SetTimer()\nTick groups for ordering — PrePhysics, DuringPhysics, PostPhysics\nBlueprint tick expensive — move hot logic to C++\nReplication\nServer is authority — clients request, server validates and replicates\nUPROPERTY(Replicated) for variable sync — implement GetLifetimeReplicatedProps\nUFUNCTION(Server) for client-to-server RPC — must be Reliable or Unreliable\nHasAuthority() to check if server — before executing authoritative logic\nRole and RemoteRole for network role checks — ROLE_Authority is server\nAsset References\nHard references load with parent — bloats memory, use for always-needed\nSoft references (TSoftObjectPtr) load on demand — for optional or large assets\nLoadSynchronous() or AsyncLoad for soft refs — don't access until loaded\nBlueprint class references: TSubclassOf<T> — type-safe class selection\nMemory and Pointers\nTSharedPtr for non-UObjects — reference counted, auto-deletes\nTUniquePtr for exclusive ownership — can't copy, moves only\nMakeShared<T>() for creation — single allocation for object and control block\nNever mix raw new/delete with smart pointers — choose one pattern\nCommon Mistakes\nAccessing null actor in Blueprint — use IsValid() node before access\nPIE (Play In Editor) vs packaged build differ — test shipping build\nHot reload corrupts Blueprints — close editor, build, reopen\nGetWorld() null in constructor — world doesn't exist yet, use BeginPlay\nSpawning in constructor crashes — defer to BeginPlay or later\nFString for display, FName for identifiers — FName is hashed, faster comparison"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/ivangdavila/unreal-engine",
    "publisherUrl": "https://clawhub.ai/ivangdavila/unreal-engine",
    "owner": "ivangdavila",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/unreal-engine",
    "downloadUrl": "https://openagent3.xyz/downloads/unreal-engine",
    "agentUrl": "https://openagent3.xyz/skills/unreal-engine/agent",
    "manifestUrl": "https://openagent3.xyz/skills/unreal-engine/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/unreal-engine/agent.md"
  }
}