[UE5][C++]正しい作業まとめ

正しい作業場所まとめ(重要)

作業内容やる場所
フォルダ作成 / リネームエクスプローラー
.uplugin / Build.cs 編集VS(テキスト)
.h / .cpp 追加VS
Generate Project Filesエクスプローラー(.uproject右クリック)
ビルドVS
アセット作成 / 動作確認UEエディタ

Runtime に追加とかはUEがわでやるの?VSでやるの?

結論:VS(=ファイルとして)でやる。UEエディタではやらない。
これは断言できる。


なぜ UE 側じゃダメなのか

UEエディタで出来るのは:

  • アセット作成
  • Blueprint作成
  • C++ クラスの“ひな型追加”

だけ。

今回の Runtime / Editor モジュール分割
CodeMaterialAsset みたいな 基底アセット型は、

  • モジュール境界
  • Build.cs 依存
  • .uplugin 参照

に直結する。

👉 UEエディタはここを安全に扱えない
(途中でクラッシュ or 不完全な構造になる)

[UE5.7][VisualStudio2022].uprojectが壊れた時に回復する方法

UEをLogを出しながら起動する
UnrealEditor.exe “プロジェクト名.uproject” -log

D:
cd D:\Program Files\Epic Games\UE_5.7\Engine\Binaries\Win64\
UnrealEditor.exe "D:\Sandbox\UE57CreatePlugin4\furcraeaUEOpenAI2\furcraeaUEOpenAI2\furcraeaUEOpenAI2.uproject" -log

pause

これを起動しているときに
Saved\Logs\プロジェクト名.log

D:\Sandbox\UE57CreatePlugin4\furcraeaUEOpenAI2\furcraeaUEOpenAI2\Saved\Logs
furcraeaUEOpenAI2.log
がどうなってるか見てみること。。。。

[UE5.6.1]1回目ビルドしたゲームが初回起動時に起動しない2回目Fatal errorエラー表示3回目真っ黒でフリーズ4回目起動する現象

UE5.6.1

1回目ビルドしたゲームが初回起動時に起動しない

2回目エラー表示

3回目エラー表示

4回目起動する

現象

#UE5ぷちコン #UE5

エラー内容

Fatal error: [File:D:\build\++UE5\Sync\Engine\Source\Runtime\RenderCore\Private\ShaderCodeArchive.cpp] [Line: 491] 
DecompressShaderWithOodleAndExtraLogging(): Could not decompress shader group with Oodle. Group Index: 273 Group IoStoreHash:3c8a0ef0516ede135e080909 Group NumShaders: 21 Shader Index: 6212 Shader In-group Index: 273 Shader Hash: 2561105F86D697C3EA5EA6F46D923073FF6A8EEA. The CPU (Intel(R) Core(TM) i9-14900) may be unstable; for details see http://www.radgametools.com/oodleintel.htm

Fatal error: [File:D:\build++UE5\Sync\Engine\Source\Runtime\RenderCore\Private\ShaderCodeArchive.cpp] [Line: 491]
DecompressShaderWithOodleAndExtraLogging(): Could not decompress shader group with Oodle. Group Index: 273 Group IoStoreHash:3c8a0ef0516ede135e080909 Group NumShaders: 21 Shader Index: 6212 Shader In-group Index: 273 Shader Hash: 2561105F86D697C3EA5EA6F46D923073FF6A8EEA. The CPU (Intel(R) Core(TM) i9-14900) may be unstable; for details see http://www.radgametools.com/oodleintel.htm

https://www.radgametools.com/oodleintel.htm

翻訳
致命的なエラー: [ファイル:D:\build++UE5\Sync\Engine\Source\Runtime\RenderCore\Private\ShaderCodeArchive.cpp] [行: 491]
DecompressShaderWithOodleAndExtraLogging(): Oodle を使用してシェーダーグループを解凍できませんでした。グループインデックス: 273、グループ IoStoreHash: 3c8a0ef0516ede135e080909、グループ NumShaders: 21、シェーダーインデックス: 6212、シェーダーグループ内インデックス: 273、シェーダーハッシュ: 2561105F86D697C3EA5EA6F46D923073FF6A8EEA。CPU (Intel(R) Core(TM) i9-14900) が不安定な可能性があります。詳細は http://www.radgametools.com/oodleintel.htm をご覧ください。

によると

Intelプロセッサの不安定性によりOodleの解凍に失敗

第 13 世代および第 14 世代 Intel Core プロセッサ (13xxx および 14xxx シリーズ) に影響するハードウェアの問題が確認されており、システム全体の不安定性として現れ、Oodle Data の解凍エラーや Unreal で構築されたゲームのクラッシュなどを引き起こします。

Unreal Engine ベースのゲームを開始するときに最もよくある失敗は次のタイプです。

DecompressShader(): シェーダーを解凍できませんでした (GetShaderCompressionFormat=Oodle)

しかし、この問題はOodleだけに影響するわけではなく、この不安定性に悩まされているマシンは、標準的なベンチマークやストレステストプログラムでも不具合を示すようになります。多くのスレッドでプロセッサを大量に使用するプログラムは、クラッシュや予期せぬ動作を引き起こす可能性があります。Adobe Premiere、RealBench、CineBench、Prime95、Handbrake、Visual Studioなど、多くのプログラムでクラッシュが発生しています。この問題は、CPUが原因であるにもかかわらず、GPUエラーメッセージ(「ビデオメモリ不足」エラーなど)として表示されることもあります。

Intel社は 、根本的な原因は チップ内のクロック信号回路の急速な劣化であり、これは他の複数の問題が重なった結果であると確認しました。これはチップ自体の物理的な摩耗であり、一度劣化が起こると残念ながら回復不可能です。影響を受けた部品は交換する必要があります。手順については、 こちらをご覧ください。

本稿執筆時点(2024年10月1日)では、回路の損傷につながる動作条件を回避するための新しいBIOSアップデートがリリースされつつあります。既製のノートパソコンまたはデスクトップPCをお使いの場合は、ベンダーが(少なくとも間もなく)この回避策を含むBIOSアップデートを配布しているはずです。症状が現れる前に、これらのアップデートをできるだけ早くインストールすることが重要です。クラッシュが発生してからでは、ソフトウェアによる解決策では手遅れです。ご自身でマシンを組み立てた場合は、マザーボードベンダーのウェブサイトで最新のBIOSイメージをご確認ください。

これは以前のページの更新版です。現在は廃止されている古いバージョンは、こちらにアーカイブされています。

[UE5.3.2][VisualStudio][Cpp]UnrealEngineのCPPプラグインからOpenAI(ChatGPT4o)を呼んで返り値jsonからパースしてメッセージをとる

今回は以下の続き

前は戻ったjsonをそのまま表示していたが今度は中身のみを表示する

.h

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

#pragma once

#include "CoreMinimal.h"
#include "Http.h"
#include "Json.h"
#include "GameFramework/Actor.h"
#include "CurlApiTest.generated.h"


UCLASS()
class FURCRAEAUEOPENAI_API ACurlApiTest : public AActor
{
	GENERATED_BODY()
	
public:	
	// Sets default values for this actor's properties
	ACurlApiTest();

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;



	UFUNCTION(BlueprintCallable, Category = "Http")
	void SendChatCompletionRequest();
	void ProcessResponseSimple(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful);
	//void ProcessResponse(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful);
};

.cpp

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


#include "CurlApiTest.h"
#include "CurlRequest.h"
#include "Http.h"
#include "Json.h"
#include "Misc/Paths.h"
#include "Misc/ConfigCacheIni.h"

// Sets default values
ACurlApiTest::ACurlApiTest()
{
 	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;

}

// Called when the game starts or when spawned
void ACurlApiTest::BeginPlay()
{
	Super::BeginPlay();
	SendChatCompletionRequest();
}

// Called every frame
void ACurlApiTest::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

}



void ACurlApiTest::SendChatCompletionRequest()
{
	FString ApiKey = TEXT("sk-から始まる秘密鍵");

	TSharedRef<IHttpRequest> HttpRequest = FHttpModule::Get().CreateRequest();
	HttpRequest->SetURL("https://api.openai.com/v1/chat/completions");
	HttpRequest->SetVerb("POST");
	HttpRequest->SetHeader("Content-Type", "application/json");
	HttpRequest->SetHeader("Authorization", "Bearer " + ApiKey);

	// JSON Body
	FString Content = TEXT(R"(
    {
        "model": "gpt-4o-mini",
        "messages": [{"role": "user", "content": "Say this is a test!"}],
        "temperature": 0.7
    }
    )");

	HttpRequest->SetContentAsString(Content);

	HttpRequest->OnProcessRequestComplete().BindUObject(this, &ACurlApiTest::ProcessResponseSimple);
	/*
	HttpRequest->OnProcessRequestComplete().BindLambda([this](FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful)
		{
			ProcessResponse(Request, Response, bWasSuccessful);
		});
	*/
	HttpRequest->ProcessRequest();
}



void ACurlApiTest::ProcessResponseSimple(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful)
{
	if (bWasSuccessful && Response.IsValid())
	{
		FString ResponseContent = Response->GetContentAsString();
		TSharedPtr<FJsonObject> JsonObject;
		TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(ResponseContent);

		if (FJsonSerializer::Deserialize(Reader, JsonObject) && JsonObject.IsValid())
		{
			FString MessageContent = JsonObject->GetArrayField("choices")[0]->AsObject()->GetObjectField("message")->GetStringField("content");
			UE_LOG(LogTemp, Warning, TEXT("Response Message: %s"), *MessageContent);
		}
		else
		{
			UE_LOG(LogTemp, Error, TEXT("Failed to parse JSON response"));
		}
	}
	else
	{
		UE_LOG(LogTemp, Error, TEXT("Request failed"));
	}


}

WBP_ApiTestにボタン追加して

SendChatCompletionRequest を呼び出した

できた!

[UE5.3.2]Udemy Master Dynamic Combat, AI Challenges, and C++ Techniques to Create Your Own Epic Action Games in UE5 でのエラー PlayerAnimInstance.gen.cpp.obj : error LNK2001: unresolved external symbol  の解決方法

1>PlayerAnimInstance.gen.cpp.obj : error LNK2001: unresolved external symbol "public: static struct UE::Math::TIntPoint<int> const UE::Math::TIntPoint<int>::ZeroValue" (?ZeroValue@?$TIntPoint@H@Math@UE@@2U123@B)
1>Throwaway.gen.cpp.obj : error LNK2001: unresolved external symbol "public: static struct UE::Math::TIntPoint<int> const UE::Math::TIntPoint<int>::ZeroValue" (?ZeroValue@?$TIntPoint@H@Math@UE@@2U123@B)
1

リンクエラー(LNK2001)が発生しているようですね。このエラーは、コンパイラが ActionCombat.cpp.obj ファイル内で参照されているシンボルの定義を見つけられないことを示しています。以下のような原因が考えられます:

  1. 関数定義の欠如:ヘッダーファイルで宣言されたすべての関数に対応する定義がソースファイルにあることを確認してください。
  2. 関数シグネチャの不一致:宣言と定義の関数シグネチャが完全に一致していることを確認してください。
  3. ライブラリの不足:シンボルが外部ライブラリの一部である場合、そのライブラリがプロジェクト設定で正しくリンクされていることを確認してください。
  4. インクルードディレクティブ:必要なヘッダーファイルがすべてソースファイルにインクルードされていることを確認してください。

以下の手順でこのエラーをトラブルシューティングし、解決することができます:

  • 関数の宣言と定義を確認:ヘッダーファイルで宣言されたすべての関数に対応する定義がソースファイルにあることを確認します。
  • ヘッダーファイルのインクルードを確認:関数が宣言されているヘッダーファイルが、関数を使用するすべてのソースファイルにインクルードされていることを確認します。
  • 必要なライブラリをリンク:関数が静的または動的ライブラリの一部である場合、そのライブラリがビルドプロセス中にリンクされていることを確認します。
  • 関数の可視性を確認:関数が現在のスコープ内でアクセス可能であり、他のソースファイルで定義されている場合は extern として正しくマークされていることを確認します。

Games/ActionCombat 右クリックして Clean を実行してから Buildする。

やったーー!解決

[UE5.3]C++プロジェクトをリフレッシュプロジェクトファイルの作成時にエラーが発生しました

Running D:/Program Files/Epic Games/UE_5.3/Engine/Build/BatchFiles/Build.bat  -projectfiles -project="D:/Sandbox/UE53CratePlugin/UE5_VS/UE5_VS.uproject" -game -rocket -progress
Using bundled DotNet SDK version: 6.0.302
Running UnrealBuildTool: dotnet "..\..\Engine\Binaries\DotNET\UnrealBuildTool\UnrealBuildTool.dll" -projectfiles -project="D:/Sandbox/UE53CratePlugin/UE5_VS/UE5_VS.uproject" -game -rocket -progress
Log file: C:\Users\furcr\AppData\Local\UnrealBuildTool\Log_GPF.txt

Generating VisualStudio2019 project files:
Discovering modules, targets and source code for project...
Visual Studio 2019 does not support .NET 6.0 C# projects, these projects will not be added to the generated solution.
Please generate the Visual Studio 2022 solution if .NET 6.0 C# project support is required.
Microsoft platform targets must be compiled with Visual Studio 2022 17.4 (MSVC 14.34.x) or later for the installed engine. Please update Visual Studio 2022 and ensure no configuration is forcing WindowsTargetRules.Compiler to VisualStudio2019. The current compiler version was detected as: 14.29.30154

つまりは

D:/Program Files/Epic Games/UE_5.3/Engine/Build/BatchFiles/Build.bat -projectfiles -project="D:/Sandbox/UE53CratePlugin/UE5_VS/UE5_VS.uproject" -game -rocket -progress を実行しています
バンドルされた DotNet SDK バージョン 6.0.302 を使用しています
UnrealBuildTool を実行しています: dotnet "..\..\Engine\Binaries\DotNET\UnrealBuildTool\UnrealBuildTool.dll" -projectfiles -project="D:/Sandbox/UE53CratePlugin/UE5_VS/UE5_VS.uproject" -game -rocket -progress
ログ ファイル: C:\Users\furcr\AppData\Local\UnrealBuildTool\Log_GPF.txt

VisualStudio2019 プロジェクト ファイルを生成しています:
プロジェクトのモジュール、ターゲット、ソース コードを検出しています...
Visual Studio 2019 .NET 6.0 C# プロジェクトをサポートしていないため、これらのプロジェクトは生成されたソリューションに追加されません。
.NET 6.0 C# プロジェクトのサポートが必要な場合は、Visual Studio 2022 ソリューションを生成してください。
インストールされているエンジンでは、Microsoft プラットフォーム ターゲットを Visual Studio 2022 17.4 (MSVC 14.34.x) 以降でコンパイルする必要があります。Visual Studio 2022 を更新し、WindowsTargetRules.Compiler を VisualStudio2019 に強制する構成がないことを確認してください。現在のコンパイラ バージョンは 14.29.30154 として検出されました。

VS2022をつかえってこと

したらエラーでなくなった  

[VScode][C++] VScode でCodeRunnerのRun In Tarminalが出てこないの解決方法(MinGW)(64bit Windows11)

参考URL

この記事に基づいて書きます。

https://qiita.com/ochx/items/01449d09777187790ee4

CodeRunner の 拡張機能の設定 Run In Tarminalが出てこない のは 

配色テーマ でダークモダンを選ばないと出てきませんでした。ライトモダンじゃだめだった。

ちゃんちゃん。

furcr@furcraea_built MINGW64 /c/samples/ehararyu_cpp_sample/cpp/source010203
$ make
makefile:2: *** missing separator. Stop.

はmakefile の改行のあとが space だから Tab にする。

program : source.cpp
    cat source.cpp > program

source : source01 source02 source03
    cat source01 source02 source03 > source

program : source
	cat source > program

source : source01 source02 source03
	cat source01 source02 source03 > source

[UE5.3.2] LANDSCAPE: 1 ACTOR WITH PHYSICAL MATERIALS NEEDS TO BE REBUILTの解決

https://forums.unrealengine.com/t/ue5-landscape-physical-material-needs-to-be-rebuilt/484614

みなさん、こんにちは。私も同じ問題に遭遇しました。Build>Build All Landscape に移動すると、「物理マテリアルを再構築する必要があります」というエラーを解決できることが分かりました。 
[Landscape] ワールド構築がうまくいくことを祈っています。

解決しませんでした。

Landscapeを消しました。エラーは出ない

LandScapeをつくりなおしました。エラーが出る。