UE4で壁と壁の間を通り抜ける Go through between walls

まずは新規ブループリントでActor

壁を作るCube1

とCubeを複製してCube2

SceneObjectでStartとEndを作った

UnGoBox1をいけない場所におく

コリジョンプリセットは2つともBlockAll

ThirdPersonCharactorにはCamera2を設置する

BoxのBeginOverlapとEndOverlapにつないでいく

BP_DoubleWallについてはblueprintue.のサービスでコピペできるようにしてみた。

https://blueprintue.com/render/9i99qwr-/

Stateという変数をCharactorに用意してそれを8になったら壁のあいだに入ったようにした

壁と壁の間にフィットするための関数(いらないかもしれない笑)

壁の間を抜ける歩きと止まりポーズはここ

https://drive.google.com/file/d/1VlIzmBagQsq6Dp7ok3UYMHUzP5nqn_Gc/view?usp=sharing

これをリターゲットして使ったが ジョイント構造はThirdPersonと変わらないと思うので

UE4_Mannequin_Skeletonへ読み込むでもいいはずだが

リターゲットはこれを見た

2つのポーズから

ブレンドスペース1Dを作成

水平軸にSpeedと入れ、0にIdle 1にloopを設定した。

アニムブループリントにステートを作って

ブレンドスペース1Dを配置

InWallブールを作成して配置した

逆もしかり

イベントグラフでStateが8になったらInWallブールを切り替えた

最後にstateが8になったらカメラを上面図にする

これが全部成立させることができればこうなる。

UE4でBluePrintでテキストファイルを読み込む方法(UE4.26)

以下のサイトを参考にさせていただきました。
https://horizonglow2.blogspot.com/2019/02/ue4.html

新規C++クラスを作成します。
作成するのは、成果物がBPで扱えるBlueprint Function Libraryになります。

フォルダやクラス名を適当に決めたら、VisualStudioが開きます。
まず.hファイルに定義を書きます。
ここではTextFileToStringというクラスを作成することにします。
書いたコードはこんな感じ。

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "TextFileToString.generated.h"

/**
 * 
 */
UCLASS()
class AMBITIONEARLYHOURSKY_API UTextFileToString : public UBlueprintFunctionLibrary
{
	GENERATED_BODY()

		UFUNCTION(BlueprintCallable, Category = "MyBPLibrary")
		static void TextFileLoadToString(FString Filename, FString& FileData, bool& Success);
	
};

CPPはこう

// Fill out your copyright notice in the Description page of Project Settings.


#include "TextFileToString.h"

// ScriptLoader.cpp

//#include "FileHelpers.h"
#include "Engine.h"


// ScriptLoader.cpp
void UTextFileToString::TextFileLoadToString(FString Filename, FString& FileData, bool& Success)
{
	if (GEngine)
	{
		FString FilePath = Filename;

		if (!FPlatformFileManager::Get().GetPlatformFile().FileExists(*FilePath))
		{
			Success = false;
			return;
		}

		const int64 FileSize = FPlatformFileManager::Get().GetPlatformFile().FileSize(*FilePath);
		FFileHelper::LoadFileToString(FileData, *FilePath);
		Success = true;

	}
	Success = false;
}

こんなノードの使い方します。

UE4でBluePrintの変数の値をテキストファイルとして保存する方法(UE4.26)

以下を参考にさせてもらいました。

https://htsuda.net/archives/1815

プロジェクトファイル(拡張子が .uproject となっているファイル)があるフォルダの中に Source という名前のフォルダをまず作成します。次にC++ プロジェクトを作成します。プロジェクトファイルを右クリックすると、メニューの中に Generate Visual Studio project files というのがあるのでそれをクリックします。

レベルエディタのメニューから「ファイル File」> 「新規C++クラス New C++ Class」を選びます。親クラスは Actor にします。ファイル名は SaveToText とします。公開設定はパブリックを選んでおきます。クラス作成ボタンを押すとしばらくのコンパイル時間の後にヘッダファイルと cpp ファイルが作成され、VS が開きます。

C++ のエディタが開いていない場合はコンテンツブラウザの C++ クラス(C++ Classes)フォルダ内にある SaveToText のファイルをダブルクリックします。そして、SaveToText.hと SaveToText.cpp を下記のように書き換えます。

クラス名の自動生成されている部分class ゲーム名_APIは書き換えずにおきます。
class AMBITIONEARLYHOURSKY_API USaveToText : public UBlueprintFunctionLibrary
あとは
public: の行以下の部分を追加するだけでOKです。

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "SaveToText.generated.h"

UCLASS()
class AMBITIONEARLYHOURSKY_API USaveToText : public UBlueprintFunctionLibrary
{
	GENERATED_BODY()
	
public:	
    UFUNCTION(BlueprintCallable, Category = "save")
        static bool FileSaveString(FString SaveTextB, FString FileNameB);

    UFUNCTION(BlueprintPure, Category = "save")
        static bool FileLoadString(FString FileNameA, FString& SaveTextA);

    UFUNCTION(BlueprintCallable, Category = "save")
        static FString FileLoadAndReturnString(FString FileNameA);

};

cpp ファイルも下記記のように編集します。以下のコードは https://answers.unrealengine.com/questions/174839/loading-text-to-a-string.html で紹介されているものです(保存以外にもテキストファイルの読み込み関数があります)。ちなみに、クラス名は ASaveToText と先頭に A が付いていますが、これが U であったりする場合もあります。その場合は cpp ファイルの中でクラス名が付いている箇所もそれに合わせるようにしてください。コンパイル時にエラーが出た時はヘッダと cpp ファイルでクラス名が一致していないことが原因だと思われます

// Fill out your copyright notice in the Description page of Project Settings.


#include "SaveToText.h"

// Load and save text files
bool USaveToText::FileSaveString(FString SaveTextB, FString FileNameB)
{
    return FFileHelper::SaveStringToFile(SaveTextB, *( FileNameB));
}

bool USaveToText::FileLoadString(FString FileNameA, FString& SaveTextA)
{
    return FFileHelper::LoadFileToString(SaveTextA, *( FileNameA));
}

FString USaveToText::FileLoadAndReturnString(FString FileNameA)
{
    FString myString;
    bool myBool = true;
    myBool = FFileHelper::LoadFileToString(myString, *( FileNameA));
    return myString;
}

h と .cpp ファイルを保存したら、UE4 のエディタ上でコンパイルボタン(ビルドボタンの右にある)を押します。コンパイルが成功したら作ったこの関数をブループリントで使えるようになります。

レベルブループリントなどを開いて記事冒頭のようなノードを組みます。

そして実行すれば、プロジェクトフォルダ内にテキストファイルが保存されています。やりました!