It looks like this is some fallout from CL 19405683. If we change a variable from vector to transform, it'll pass this check:

if(Tag.StructName == NAME_Transform)
    Struct->SerializeTaggedProperties(Slot, (uint8*)DestAddress, Struct, nullptr);
    return EConvertFromTypeResult::Converted;
return EConvertFromTypeResult::UseSerializeItem;

We shouldn't use "UseSerializeItem". We'll serialize the vector data as a transform, which leads to incorrect data and a subsequent crash, since we slurped up the binary stream incorrectly. 

Steps to Reproduce
  1. Create a new actor blueprint and add a variable with the Vector type.
  2. Click on the eyeball to make it public and instance editable. Save and compile.
  3. Place an instance of the actor in the level and edit the value of the vector in the placed instance so it is non-zero.
  4. Save the level with the actor in it.
  5. Close the level by opening a different one.
  6. Open the actor BP and change the variable type to Transform. Save and compile.
  7. Reopen the previous level where the actor was placed and it will crash.

A sample project has also been provided.

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-168261 in the post.

Login to Vote

ComponentUE - Gameplay - LWC
Affects Versions5.1
Target Fix5.5
CreatedOct 25, 2022
UpdatedFeb 16, 2024
View Jira Issue