Ue4

ue4 c ++インターフェースの記述



Ue4 C Interface Writing



UE4インターフェースを使用すると、ブループリントの使用と互換性があるため、通常の高級言語と比較して、より多くの作業が必要になります。注意が必要な小さな穴がいくつかあります。始めましょう。

1.新しいインターフェイスクラスを作成します

通常どおり、UE4エディターを開き、新しいC ++クラスを作成し、[オブジェクトの継承]を選択して、名前を付けます。ここでは、例として、職場のインターフェイスの名前「ITrackTeam」を使用します。



次に、継承されたクラスを変更します。間違いはありません。2つのクラスを記述してください。1つはUTrackTeamと呼ばれ、もう1つはITrackTeamと呼ばれます。クラス名とヘッダーファイル名は異なる場合があります。ここでの名前は、非現実的なルールに従っていません。 「UITrackTeam」および「IITrackTeam」という名前にする必要があります。



.hファイル

#pragma once #include 'Object.h' #include 'ITrackTeam.generated.h' UINTERFACE(Blueprintable) class UTrackTeam : public UInterface { GENERATED_UINTERFACE_BODY() } class ITrackTeam { GENERATED_IINTERFACE_BODY() public: /* Obtain the following object in front */ UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = 'Item') AActor* GetPreMember() /* Obtain the following target position */ UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = 'Item') FVector GetTailLocation(int32 ¶m1, bool param2) }

.cppファイル

#include 'Programming.h' #include 'ITrackTeam.h' UTrackTeam::UTrackTeam(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { }

2. C ++クラスはこのインターフェイスを実装します

インターフェイス「AImplementInterfaceActor」を実装するアクターがあり、最初にヘッダーファイルを参照します



#include 'Interface/ITrackTeam.h'

次に、インターフェイスクラスを継承します

class PROGRAMMING_API AImplementInterfaceActor : public AActor, public ITrackTeam

インターフェイスを実装するには、元のメソッド名の後に「_Implementation」を追加することに注意してください

virtual AActor* GetPreMember_Implementation() override virtual FVector GetTailLocation_Implementation(int32 ¶m1, bool param2) override

.cppファイルを使用すると、ブループリントで呼び出すことができるほど雄弁にテストステートメントを記述できます。

AActor* AImplementInterfaceActor::GetPreMember_Implementation() { AActor *temp = nullptr return temp } FVector AImplementInterfaceActor::GetTailLocation_Implementation(int32 ¶m1, bool param2) { GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, FString::FromInt(param1)) if (param2) { GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red,TEXT('True') ) } param1 = 7 return FVector(0.0f, 1.0f, 2.0f) }

3. C ++では、インターフェイスメッセージをクラスに送信します

最初にそれをインターフェースクラスに変換してから、メソッドを呼び出します。呼び出すときは、必ず「Execute _」+メソッド名を使用してください。括弧内にパラメータのないメソッドの場合は、対象クラスの元のポインタを直接書き込んでください。 int32やboolなどのパラメーターがある場合は、それらを後ろに書き込むだけです。

AActor* temp = nullptr ITrackTeam* iTemp = Cast(this) if (iTemp) { int32 refInt = 5 FVector TmpVector = iTemp->Execute_GetTailLocation(this, refInt, true) GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TmpVector.ToString()) GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, FString::FromInt(refInt)) }

4.特定のクラスがインターフェイスを実装しているかどうかを判断します

C ++とインターフェイスを実装するブループリントクラス間の互換性を確保するには、次のコードを使用します。

obj->GetClass()->ImplementsInterface(UItemInterface::StaticClass())

5.コンパイルの失敗に関する一般的な問題

5.1。インターフェイスのすべてのメソッドは、インターフェイスクラスを継承するクラスに実装する必要があります。

5.2。メタデータ識別子を誤用しないでください。競合しやすくなります。

その他のリンク。

公式ドキュメント:https://docs.unrealengine.com/latest/CHN/Programming/UnrealArchitecture/Reference/Interfaces/index.html

wiki:https://wiki.unrealengine.com/Interfaces_in_C%2B%2B

Q&A:https://answers.unrealengine.com/questions/250263/calling-interface-functions-in-c.html