title: OnConstruction() method of an Unreal Engine's Actor class is not correctly executed
body: <p>I'm writing an ALadder class by C++ inspired by a Alan Noon's tutorial <a href="https://www.youtube.com/watch?v=axuwbkDWI5U" rel="nofollow noreferrer">https://www.youtube.com/watch?v=axuwbkDWI5U</a>.
  Currently the class is very simple:</p>
  
  <p><strong>Ladder.h</strong> </p>
  
  <pre><code>#pragma once
  
  #include "GameFramework/Actor.h"
  
  #include "Ladder.generated.h"
  
  class UPaperSprite;
  
  UCLASS()
  class ALadder : public AActor
  {
      GENERATED_BODY()
  
  public:
  
      ALadder();
  
      virtual void OnConstruction(const FTransform&amp; Transform) override;
  
  protected:
  
      UPROPERTY(EditAnywhere, Meta = (MakeEditWidget = true))
          FVector TopVector{FVector(0.0f, 0.0f, 100.0f)};
  
      UPROPERTY(EditAnywhere, Meta = (MakeEditWidget = true))
          FVector BottomVector{FVector(0.0f, 0.0f, 0.0f)};
  
      UPROPERTY(EditAnywhere)
          float RungOffset{ 10.0f };
  
      UPROPERTY(EditAnywhere)
          UPaperSprite* RungSprite {};
  
  private:
  };
  </code></pre>
  
  <p><strong>Ladder.cpp</strong></p>
  
  <pre><code>#include "Actors/Ladder.h"
  #include "PaperSprite.h"
  #include "PaperSpriteComponent.h"
  #include "UObject/UObjectIterator.h"
  
  ALadder::ALadder() 
  {
      RootComponent = CreateDefaultSubobject&lt;USceneComponent&gt;(TEXT("RootSceneComponent"));
  }
  
  void ALadder::OnConstruction(const FTransform&amp; Transform)
  {
      Super::OnConstruction(Transform);
  
      BottomVector = FVector(0.0f);
      TopVector.X = 0.0f;
      TopVector.Y = 0.0f;
  
      TArray&lt;UActorComponent*&gt; SpriteComponents = GetComponentsByClass(UPaperSpriteComponent::StaticClass());
      // Remove all components
      for (auto It = SpriteComponents.CreateIterator(); It; It++)
      {
          (*It)-&gt;DestroyComponent();
      }
  
      UPaperSpriteComponent* SpriteComponent = nullptr;
      float Diff_Z = (TopVector - BottomVector).Z;
      if (Diff_Z &lt; 0.0f)
      {
          TopVector = BottomVector;
      }
  
      int32 RungsNumber = (int)(Diff_Z / RungOffset);
      // Add components
      for (int32 i = 0; i &lt;= RungsNumber; ++i)
      {
          SpriteComponent = NewObject&lt;UPaperSpriteComponent&gt;(this);
          FAttachmentTransformRules AttachmentRules(EAttachmentRule::KeepRelative, false);
          SpriteComponent-&gt;AttachToComponent(RootComponent, AttachmentRules);
          SpriteComponent-&gt;SetRelativeLocation(FVector(0.0f, 0.0f, RungOffset * i));
          SpriteComponent-&gt;SetSprite(RungSprite);
          SpriteComponent-&gt;SetCollisionEnabled(ECollisionEnabled::NoCollision);
      }
  }
  </code></pre>
  
  <p>When I try to modify the TopVector by the widget in editor, the rungs don't appear, but when I try to modify the TopVector default value by the Details panel, it works correctly.
  I noticed when I used the TopVector widget, the ALadder::OnConstruction() was called twice; these are the two different call stacks:</p>
  
  <p><strong>First call stack:</strong></p>
  
  <pre><code>&gt;   UE4Editor-platformer-6449.dll!ALadder::OnConstruction(const FTransform &amp; Transform) Line 13 C++
      UE4Editor-Engine.dll!AActor::ExecuteConstruction(const FTransform &amp; Transform, const FRotationConversionCache * TransformRotationCache, const FComponentInstanceDataCache * InstanceDataCache, bool bIsDefaultTransform) Line 839   C++
      UE4Editor-Engine.dll!AActor::RerunConstructionScripts() Line 494    C++
      UE4Editor-Engine.dll!AActor::PostEditChangeProperty(FPropertyChangedEvent &amp; PropertyChangedEvent) Line 125  C++
      UE4Editor-UnrealEd.dll!FEdMode::InputDelta(FEditorViewportClient * InViewportClient, FViewport * InViewport, FVector &amp; InDrag, FRotator &amp; InRot, FVector &amp; InScale) Line 378    C++
      UE4Editor-PlacementMode.dll!FPlacementMode::InputDelta(FEditorViewportClient * InViewportClient, FViewport * InViewport, FVector &amp; InDrag, FRotator &amp; InRot, FVector &amp; InScale) Line 437    C++
      UE4Editor-UnrealEd.dll!FEditorModeTools::InputDelta(FEditorViewportClient * InViewportClient, FViewport * InViewport, FVector &amp; InDrag, FRotator &amp; InRot, FVector &amp; InScale) Line 729   C++
      UE4Editor-UnrealEd.dll!FEditorViewportClient::InputWidgetDelta(FViewport * InViewport, EAxisList::Type CurrentAxis, FVector &amp; Drag, FRotator &amp; Rot, FVector &amp; Scale) Line 3283  C++
      UE4Editor-UnrealEd.dll!FLevelEditorViewportClient::InputWidgetDelta(FViewport * InViewport, EAxisList::Type InCurrentAxis, FVector &amp; Drag, FRotator &amp; Rot, FVector &amp; Scale) Line 2383   C++
      UE4Editor-UnrealEd.dll!FEditorViewportClient::UpdateMouseDelta() Line 2130  C++
      UE4Editor-UnrealEd.dll!FEditorViewportClient::Tick(float DeltaTime) Line 1180   C++
      UE4Editor-UnrealEd.dll!FLevelEditorViewportClient::Tick(float DeltaTime) Line 2138  C++
      UE4Editor-UnrealEd.dll!UEditorEngine::Tick(float DeltaSeconds, bool bIdleMode) Line 1800    C++
      UE4Editor-UnrealEd.dll!UUnrealEdEngine::Tick(float DeltaSeconds, bool bIdleMode) Line 403   C++
      UE4Editor.exe!FEngineLoop::Tick() Line 3699 C++
      [Inline Frame] UE4Editor.exe!EngineTick() Line 62   C++
      UE4Editor.exe!GuardedMain(const wchar_t * CmdLine, HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, int nCmdShow) Line 174   C++
      UE4Editor.exe!WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow) Line 262   C++
      [External Code] 
  </code></pre>
  
  <p><strong>Second call stack:</strong></p>
  
  <pre><code>&gt;   UE4Editor-platformer.dll!ALadder::OnConstruction(const FTransform &amp; Transform) Line 13  C++
      UE4Editor-Engine.dll!AActor::ExecuteConstruction(const FTransform &amp; Transform, const FRotationConversionCache * TransformRotationCache, const FComponentInstanceDataCache * InstanceDataCache, bool bIsDefaultTransform) Line 839   C++
      UE4Editor-Engine.dll!AActor::RerunConstructionScripts() Line 494    C++
      UE4Editor-Engine.dll!AActor::PostEditMove(bool bFinished) Line 147  C++
      UE4Editor-UnrealEd.dll!FLevelEditorViewportClient::TrackingStopped() Line 2910  C++
      UE4Editor-UnrealEd.dll!FMouseDeltaTracker::EndTracking(FEditorViewportClient * InViewportClient) Line 306   C++
      UE4Editor-UnrealEd.dll!FEditorViewportClient::StopTracking() Line 2655  C++
      UE4Editor-UnrealEd.dll!FEditorViewportClient::InputKey(FViewport * InViewport, int ControllerId, FKey Key, EInputEvent Event, float __formal, bool __formal) Line 2590  C++
      UE4Editor-UnrealEd.dll!FLevelEditorViewportClient::InputKey(FViewport * InViewport, int ControllerId, FKey Key, EInputEvent Event, float AmountDepressed, bool bGamepad) Line 2607  C++
      UE4Editor-Engine.dll!FSceneViewport::OnMouseButtonUp(const FGeometry &amp; InGeometry, const FPointerEvent &amp; InMouseEvent) Line 566 C++
      UE4Editor-Slate.dll!SViewport::OnMouseButtonUp(const FGeometry &amp; MyGeometry, const FPointerEvent &amp; MouseEvent) Line 202 C++
      [Inline Frame] UE4Editor-Slate.dll!FSlateApplication::RoutePointerUpEvent::__l13::&lt;lambda_8aae5586f97da0914c7f98177fd6d3e0&gt;::operator()(const FArrangedWidget &amp;) Line 5592  C++
      UE4Editor-Slate.dll!FEventRouter::Route&lt;FReply,FEventRouter::FBubblePolicy,FPointerEvent,&lt;lambda_8aae5586f97da0914c7f98177fd6d3e0&gt; &gt;(FSlateApplication * ThisApplication, FEventRouter::FBubblePolicy RoutingPolicy, FPointerEvent EventCopy, const FSlateApplication::RoutePointerUpEvent::__l13::&lt;lambda_8aae5586f97da0914c7f98177fd6d3e0&gt; &amp; Lambda) Line 270 C++
      UE4Editor-Slate.dll!FSlateApplication::RoutePointerUpEvent(FWidgetPath &amp; WidgetsUnderPointer, FPointerEvent &amp; PointerEvent) Line 5576   C++
      UE4Editor-Slate.dll!FSlateApplication::ProcessMouseButtonUpEvent(FPointerEvent &amp; MouseEvent) Line 6087  C++
      UE4Editor-Slate.dll!FSlateApplication::OnMouseUp(const EMouseButtons::Type Button, const FVector2D CursorPos) Line 6060 C++
      UE4Editor-ApplicationCore.dll!FWindowsApplication::ProcessDeferredMessage(const FDeferredWindowsMessage &amp; DeferredMessage) Line 1831    C++
      UE4Editor-ApplicationCore.dll!FWindowsApplication::DeferMessage(TSharedPtr&lt;FWindowsWindow,0&gt; &amp; NativeWindow, HWND__ * InHWnd, unsigned int InMessage, unsigned __int64 InWParam, __int64 InLParam, int MouseX, int MouseY, unsigned int RawInputFlags) Line 2281    C++
      UE4Editor-ApplicationCore.dll!FWindowsApplication::ProcessMessage(HWND__ * hwnd, unsigned int msg, unsigned __int64 wParam, __int64 lParam) Line 1511   C++
      UE4Editor-ApplicationCore.dll!FWindowsApplication::AppWndProc(HWND__ * hwnd, unsigned int msg, unsigned __int64 wParam, __int64 lParam) Line 766    C++
      [External Code] 
      [Inline Frame] UE4Editor-ApplicationCore.dll!WinPumpMessages() Line 107 C++
      UE4Editor-ApplicationCore.dll!FWindowsPlatformApplicationMisc::PumpMessages(bool bFromMainLoop) Line 130    C++
      UE4Editor.exe!FEngineLoop::Tick() Line 3615 C++
      [Inline Frame] UE4Editor.exe!EngineTick() Line 62   C++
      UE4Editor.exe!GuardedMain(const wchar_t * CmdLine, HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, int nCmdShow) Line 174   C++
      UE4Editor.exe!WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow) Line 262   C++
      [External Code] 
  </code></pre>