So I had this problem and am posting the answer to save others time…
We made a very custom door and blueprint. The door enforces limits (like PhysicsConstraint) and has very particular door grab and move scripting.
The problem was that when the player runs into the door the player’s physics pushes the door, and our script enforces limits on the soor hinge.
Our EventTick was getting called before the physics updated the door in our Player so the door would vibrate at the limits. (Ugly)
In Unity we solved this by enforcing limits in LateUpdate.
The similar functionality in Unreal is the TickGroup.
The enumaration ETickingGroup is the various times in the processing of a game tick that EventTick gets called for a given Actor.
It is not available in blueprints so I used our catch-all C++ class tdlBlueprintHelpers with static blueprint calls to implement it.
In UtdlBlueprintHelpers.h
/**
* Set the Actor's tick group. See ETickingGroup. TG_PostUpdateWork is number 8 and is equivalent to Untiy's LateUpdate (sort of)
*/
UFUNCTION(BlueprintCallable, Category = TDLHelpers)
static void SetTickGroup(AActor * actor, int32 tickGroupEnumIndex = 8);
And the cpp
/**
* Set the Actor's tick group which is when it gets it's Tick event called. See the C++ manuals.
**/
void UtdlBlueprintHelpers::SetTickGroup(AActor * actor, int32 tickGroupEnumIndex)
{
if (actor == NULL)
{
return;
}
actor->SetTickGroup((ETickingGroup)tickGroupEnumIndex);
}
Then in the Event BeginPlay you call it.
And now our doors don’t vibrate!