My VR Application starts an external VR application which is then in focus. Ending the Application brings the Unreal Application again in focus. The problem is, tho the application is running fine, the image freezes. This problem can be solved by disabling the HMD and enabling it again, for example when the key “R” is pressed. How can I automatically disable/enable the HMD when the application gets the focus back?
I already saw that thread but its not exactly what i want to do. I need an event that detects only once if the focus is lost or the focus got back. It goes more in the direction of UGameViewportClient::LostFocus and UGameViewportClient::ReceivedFocus but Im not sure how to implement it. I`m relatively new to c++ and unreal programming. I already looked at https://answers.unrealengine.com/questions/225658/application-lost-focus-event.html
As you mention it, you should use UGameViewportClient::Lost/ReceiveFocus.
You have to create a class that derive from UGameViewportClient
Put this in the .h file :
#pragma once
#include "Engine/GameViewportClient.h"
#include "MyGameViewportClient.generated.h"
/**
* UMyGameViewportClient class.
*/
UCLASS(Blueprintable)
class GAME_API UMyGameViewportClient : public UGameViewportClient
{
GENERATED_BODY()
public:
// Override lost focus function | This function will call your blueprint function.
virtual void LostFocus(FViewport* Viewport) override;
// Override lost focus function | This function will call your blueprint function.
virtual void ReceiveFocus(FViewport* Viewport) override;
UFUNCTION(BlueprintImplementableEvent, Category="LostFocus")
public void ActionToDoBeforeLostFocus();
UFUNCTION(BlueprintImplementableEvent, Category="ReceiveFocus")
public void ActionToDoAfterReceiveFocus();
};
put this in de .cpp file:
#include "Game.h"
#include "MyGameViewportClient.h"
void UMyGameViewportClient::LostFocus(FViewport* Viewport)
{
UMyGameViewportClient::ActionToDoBeforeLostFocus(); //call our blueprint function before that the game engine execute his own LostFocus code.
UGameViewportClient::LostFocus(Viewport); //call the parent method
}
void UMyGameViewportClient::ReceiveFocus(FViewport* Viewport)
{
UGameViewportClient::ReceiveFocus(Viewport); //call the parent method
UMyGameViewportClient::ActionToDoAfterReceiveFocus(); //call our blueprint function after that the game engine execute his own ReceiveFocus code.
}
Now you juste to define a blueprint derive this class (UMyGameViewportClient) and override the ActionToDoBeforeLostFocus and ActionToDoAfterReceiveFocus in blueprint, thats it! enjoy!
This function has no parameters, to acces any variable of the game use GameMode or GameInstance object
thanks for your answer. I implemented the code as you said. Then created a new Blueprint derived from MyGameViewportClient. There I have the event Action To Do Before Lost Focus but the event is still not working.
Hi phil070,
Maybe you should implement the event Action to do Before Lost Focus as a function by override it. (You should have an option in the blueprint editor)
I think the events are governed by a system of dispatchers and I think the event is not just called at all. Moreover, in the C ++ code we have write the function to override as function. Yes I know this is confusing . I would try this evening after returning from work , to do a test on my platform if you stil blocked
Yes, I have two functions available to override (See Screenshot). If you could test it that would be awesome PS: you got a small type error in your code. It`s ReceivedFocus not ReceiveFocus. Thanks for your help!
Yep, I will test that tonigth around 10pm hour of paris beacause i’m a french guy. I will notify you after that.
Thank you, it’s write from my memory , obviously I should have checked … ^^
Yes that’s right , you can override the function that we see on the screenshot , it should do the trick
This is an old thread but still comes up when googling this topic
I think I have found the answer RE Blueprint
You can add the “Application Life Cycle” component to your object and that has delegates for Will Enter Background and Has Entered Foreground … which I think is what we are looking for in the case of
How to have a logic defined in a blueprint react to the app/game losing/gaining focus
Somewhat crazy this isn’t more clear you would think EVERY game needs to handle this at least on PC