Cash package game (shipping/development), UE 5.8.1 :(((
On old PC: (intel CPU 14 series, GTX 1080, 16 ram), project open normally, windows 10
On my second PC (Ryzen 9 5950x, RTX 3080ti, 64 ram), crash in 90%(sometimes project work-10%), Windows 11. Update BIOS, change Windows, install last nvidea drivers: nothing changes!!
“Permanent” workaround. Run this as a python script in the editor. (first it lists the Assets that has PV links) then edit the "DRY_RUN variable from True to False, to actually run the modification.
Not taking any accountablity of what might happen to your project (shouldnt “break” anything, but idk what they are doing later on if those Links are going to be required for something more than rightclick functionality at a later date). for now, the only consequence i see is that the the following actions will not be possible anymore:
1. Content Browser, right-click the mesh → ExecuteOpenInPVEditor (ProceduralVegetationEditorModule.cpp:161) 2. Level viewport, right-click a placed tree → ExecuteOpenInPVEditorOnSelectedActors (line 274)
# Strips UProceduralVegetationLink AssetUserData from PV-exported meshes/skeletons/physics assets.
# That AssetUserData holds a HARD ref back to the authoring PCG graph (UProceduralVegetation),
# which drags the graph into the cook -> UPVGrowerSettings::PostLoad crashes in packaged builds.
# Run from the editor: Tools > Execute Python Script (or the Output Log's python console).
import unreal
TARGET_DIRS = ["/Game/Megaplant_Library", "/Game/ProceduralVegetation"]
DRY_RUN = True # flip to False to actually modify + save
EAL = unreal.EditorAssetLibrary
hits = 0
failed = []
for d in TARGET_DIRS:
for path in EAL.list_assets(d, recursive=True, include_folder=False):
obj = EAL.load_asset(path)
if obj is None:
continue
try:
aud = obj.get_editor_property("asset_user_data")
except Exception:
continue # asset type has no AssetUserData
if not aud:
continue
kept = [u for u in aud
if u is not None and u.get_class().get_name() != "ProceduralVegetationLink"]
if len(kept) == len(aud):
continue
hits += 1
unreal.log("PV link on: %s" % path)
if not DRY_RUN:
EAL.checkout_asset(path)
obj.set_editor_property("asset_user_data", kept)
# only_if_is_dirty=False -> always write, don't trust the dirty flag
if not EAL.save_asset(path, False):
failed.append(path)
unreal.log("PV links found%s: %d" % ("" if DRY_RUN else " and stripped", hits))
if failed:
unreal.log_error("FAILED TO SAVE %d asset(s) - check them out manually and re-run:" % len(failed))
for p in failed:
unreal.log_error(" %s" % p)