class FlyingHUD extends HUD; var UIScene HUDScene; var MaterialInstanceConstant lifeMaterial; var UILabel MyLabel; var UIObject MyObject; //All widgets has this base class function PostBeginPlay() { local UIInteraction UIController; local FlyingController MyPC; local int idx; local array< UIObject > HUDChildren; local MaterialInterface mat; super.PostBeginPlay(); MyPC = FlyingController(PlayerOwner); UIController = MyPC.GetUIController(); if( UIController != none ) { //Open the scene UIController.OpenScene( UIScene'MyUPK.MyHUDScene', LocalPlayer( MyPC.Player ), HUDScene ); //Loop trough all the widgets and create references to them HUDChildren = HUDScene.GetChildren(true); for( idx = 0; idx < HUDChildren.length; idx++ ) { if( HUDChildren[ idx ].Name == 'lifebar' ) //'lifebar' references the name of the widget in the UIScene { //Get the widgets material mat = MaterialInterface(UIImage(HUDChildren[idx]).ImageComponent.ImageRef.GetSurface()); //Create a new MaterialInstanceConstant lifeMaterial = new() class'MaterialInstanceConstant'; //Set a reference to the widget material lifeMaterial.SetParent( mat ); //Replace the widget material with the MaterialInstanceConstant so we can modify it UIImage(HUDChildren[idx]).ImageComponent.SetImage(Minimap_material); } if( HUDChildren[ idx ].Name == 'my_label' ) { MyLabel = UILabel(HUDChildren[ idx ]); } if( HUDChildren[ idx ].Name == 'my_widget' ) { MyObject = HUDChildren[ idx ]; } } } } event Tick( float DeltaTime ) { if(PlayerOwner.Pawn != none && lifeMaterial != none) { //The widget material has a scalar parameter called 'health' lifeMaterial.SetScalarParameterValue('health', Pawn.Health); } if(someCondition) { MyLabel.SetValue(someString); MyLabel.SetVisibility(true); MyObject.SetVisibility(false); } else { MyLabel.SetVisibility(false); MyObject.SetVisibility(true); } }