キャラの回転がかくかくでいやだった。
Charactor Movement のRotation Rate 570 から370にした。

徐々に回るようになった。
キャラの回転がかくかくでいやだった。
Charactor Movement のRotation Rate 570 から370にした。

徐々に回るようになった。
1,
プレイヤーに使ってるキャラクターを複製する。
レベルにおいてもエラーがない状態にする(ABPのフラグなど)
2,
ブループリント作成
ParentClass はAIContrallerで
BP_Skeleton_AI_Follow_Contrallerを作成する。
TickにsimpleMovetoActorをつないで
Controllerはself
Goalは Get Player Pawn でPlayer Index 0 にしておくだけ。

3,キャラクターのAI Controller Classに割り当てる。

4,NavMeshBoundsVolumeを移動範囲の床に重なるようにおいてあげて

再生で完成なはず
まずは新規ブループリントで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になったらカメラを上面図にする

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



先に同じキャラクターのスケルトンでリンクするアニメーションブループリントABPを作っておくと選択肢にでてくる

以下のサイトを参考にさせていただきました。
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;
}こんなノードの使い方します。

以下を参考にさせてもらいました。
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 のエディタ上でコンパイルボタン(ビルドボタンの右にある)を押します。コンパイルが成功したら作ったこの関数をブループリントで使えるようになります。
レベルブループリントなどを開いて記事冒頭のようなノードを組みます。

そして実行すれば、プロジェクトフォルダ内にテキストファイルが保存されています。やりました!
is Valid ノードを使ってオブジェクト参照を切り分ける。
参照
UE4 Blue Print Reference Null