メインコンテンツまでスキップ
バージョン: 1.3.0

C++ 関連の変更

サンプルゲーム(開発コードネーム: Alfort)の対応においては、 ツール利用における特別な対応のために C++ のコードに手を加えています。本ページではその内容をまとめています。

具体的には以下の 4 ファイルを変更しています。

  • Alfort/AlfortBuild.cs
  • Event/AlfortMessageManager.h
  • Event/AlfortMessageManager.cpp
  • Gimmick/AlfortTriggerGimmickBase.cpp
備考

C++ の修正内容については WinMerge のパッチ出力を使っています。

Build.cs への変更

プラグインを C++ で利用する場合、最初にBuild.csを変更する必要があります。 サンプルゲームにおいてはAlfort/AlfortBuild.csがこれに相当します。

Alfort/AlfortBuild.cs

COMBridge の関数を呼び出すためにPublicDependencyModuleNames.AddRange()ComBridgeを追加します。 これにより、ComBridge のヘッダーファイルを include できるようになります。

C++ コードへの変更

Event/AlfortMessageManager.h

通しプレイの実現にあたり、現在表示しているメッセージ ID が必要になります。 Event/AlfortMessageManager.hに現在表示中のメッセージ ID を格納する変数CurrentMessageIDを追加します。

--- 19,27 ----
FName NextMessageID;

UPROPERTY(BlueprintReadOnly)
+ FName CurrentMessageID; //For AutoPlayTest
+
+ UPROPERTY(BlueprintReadOnly)
bool IsDisplayMessage;

DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnEndMessageDispather);

Event/AlfortMessageManager.cpp

Event/AlfortMessageManager.cppには Event/AlfortMessageManager.hで追加したCurrentMessageIDの実行処理を追加します。

*** 42,47 ****
--- 42,48 ----
MessageBox->HideMessage();
UAlfortFunctionLibrary::PlaySE(ESEID::UI_Finish);
}
+ CurrentMessageID = NextMessageID; //For AutoPlayTest
return false;
}
}
*** 95,100 ****
--- 96,102 ----

if (ScenarioData->ScenarioList.Contains(TextID))
{
+ CurrentMessageID = TextID;
DisplayMessageFromSTR(ScenarioData->ScenarioList[TextID].Message);
NextMessageID = ScenarioData->ScenarioList[TextID].NextMessageID;
}

Gimmick/AlfortTriggerGimmickBase.cpp

Gimmick/AlfortTriggerGimmickBase.cppには アイテム入手時にツール側にイベント通知を送るための COMBridge の API を挿入します。

*** 10,15 ****
--- 10,17 ----
#include "Kismet/GameplayStatics.h"
#include "GameFramework/Character.h"
#include "Components/WidgetComponent.h"
+ #include "COMBridgeFunction.h"
+

// Sets default values
AAlfortTriggerGimmickBase::AAlfortTriggerGimmickBase()
***************
*** 47,53 ****
--- 49,60 ----
{
UAlfortPlayData* pData = UAlfortFunctionLibrary::GetPlayData();
pData->GimmickFlagList.Add(GimmickName, bActivate);
+ UCOMBridgeFunctionLibrary::SendAsyncMessage(this, TEXT("TriggerGimmick"), GimmickName.ToString()); //For AutoPlayTest
pData->AddItem(InsideItemID);
+ if (InsideItemID.ToString().Compare(TEXT("None")) != 0)
+ {
+ UCOMBridgeFunctionLibrary::SendAsyncMessage(this, TEXT("GetItem"), InsideItemID.ToString()); //For AutoPlayTest
+ }
}
}