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
+ }
}
}