Quick answer: Unreal Blueprint cast on a resolved soft object pointer returning null? Soft ptr resolves to the asset; cast expects a subclass - cast to the asset's class, not the property class.

Soft ref of type UItemData; cast to UWeaponItemData. Cast fails even when the asset is a weapon.

Validate Get with class match

if (UItemData* item = SoftRef.Get()) {
  if (UWeaponItemData* w = Cast<UWeaponItemData>(item)) ...
}

Get resolves; Cast validates. Two-step.

Or use TSoftClassPtr

For class refs, TSoftClassPtr instead of TSoftObjectPtr. Cleaner semantics.

Audit with the type checker

Asset Audit shows real types. Cross-check expected vs actual; mismatched soft refs are the cause.

“Soft refs are typed by their declaration. Resolved assets may be subtypes.”

If you find casts on soft ref consistently failing, consider data design. Subtyping via cast is fragile; composition via interfaces is robust.

Related reading