Hello. I’m totally stack with ue4 c++ programming, my posts remains unanswered and I can’t find any info at all. I’ll try my luck one more time.
Interfaces - what are they, how does they work? I’ve read this article Interfaces_in_C++ but it gives only high level overview without actual real world example. I’m investigating interfaces in strategy game example - there’s UStrategyInputInterface. Why does file have two classes inside (UStrategyInputInterface and IStrategyInputInterface)? Is it a mandatory? Why does method name is OnInputTap() but in implementation it’s called OnInputTap_Implementation()? It seems that this method called on mouse click, but why, who calls this method?
How to listen mouse events in c++?
I’ve created a pawn in c++, added camera component to it, add transform to it. It works. But changing transform of the camera in blueprint doesn’t change anything. Also, changing rotation does’t do anything if you don’t specify bUseControllerViewRotation = falseproperty. How should I know it? Documentation here is not available. Checking all comments for all fields?
An interface is merely a contract. You’re saying that you’re expecting a certain method or group of methods to be part of the class that implements that interface.
For example, you can have characters that don’t necessarily inherit form the same class, but you know that they all need to be able to TakeDamage(float Amount) (for example). Exactly how that happens or what’s inside that method is irrelevant, so long as the signature matches that of the Interface. Likewise, you could have Furniture, for example implement that interface, and yet again handle it completely differently.
If you continue reading on the article you linked, there’s an actual example. In C++, interfaces and mutli-inheriting go hand in hand.
While I don’t have the example project installed on my computer, based on the wiki, I’m assuming UStrategyInputInterface is inheriting from UInterface, which appears to be a requirement for UE4, and does not appear to be required.
As for mouse events, you set them in the editor’s Project Settings -> Inputs. Action Mappings -> whatever mouse event you’re looking for.
Then, in your code, you can map them via a UInputComponent->BindAction(const FName ActionName, const EInputEvent KeyEvent, UserClass* Object, typename FInputActionHandlerSignature::TUObjectMethodDelegate< UserClass >::FMethodPtr Func)
Thank you for an answer. I know what is interfaces from another languages that supports it out of the box. But I’m still wonder of ue4 c++ implementation. For example, in the ling that I posted there’s a header file with
class UToStringInterface : public UInterface
and
class IToStringInterface
and this UToStringInterface is not used anywhere, so why to declare it?
Regarding mouse events I mostly interested how to listen for concrete mouse events for concrete actors, something like
myActor.addOnClickHandler(&handle)
I can’t find anything similar - no examples, api reference not available, vs intellisence is not working
Ok, so I found that there’s actually OnClicked delegate in AActor. But how to use it? When can I get signature for this delegate and how to setup all the stuff?
Next small step. In Actor.h I found declaration of OnClicked - code says that delegate function should be without parameters. It works now.
For testing I also added delegate to collision component of my actor - it have different signature. But it’s not working. Can anybody explain why?