読者コミュニティー | Unreal Engine 5から始める・動かす C++ & Blueprint
![ポジTA](https://res.cloudinary.com/zenn/image/fetch/s--ljxHin2_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/53ed891cbe.jpeg)
「Unreal Engine 5から始める C++ & Blueprint」の読書コミュニティです。
お気軽に感想やご意見いただけるとうれしいです。
Unreal Engineの世界は広大なので1人では追いきれません。
たくさんの方の知見を少しでも吸収しながら成長していく、コミュティが作るBookにしたいです。
Unreal Engineを一緒に開発できる人が増えるきっかけや、開発に困った時にここに来れば大丈夫だと思える安心をお届けしたいのでご協力よろしくお願いいたします。
頂いたご意見はGitHubのロードマップに反映して随時更新していきます。
進捗はこちらのスクラップブックで記録しています。
めちゃめちゃ勉強になってます!
BPは結構わかってきたのですが、C++がなかなかとっつきにくいのでとても重宝しております!
更新楽しみにお待ちしております!
![ポジTA](https://res.cloudinary.com/zenn/image/fetch/s--ljxHin2_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/53ed891cbe.jpeg)
コメントありがとうございます。
そろそろ更新再開できるように頑張ります!
国内では初心者向けのunreal c++の解説がほぼ無く、とてもありがたいです。また図説を入れた解説も分かりやすいです。
有料になったら買います!(寧ろ今無料の時点で申し訳ないくらい)
お忙しいところとは存じますが何卒よろしくお願いいたします。
![ポジTA](https://res.cloudinary.com/zenn/image/fetch/s--ljxHin2_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/53ed891cbe.jpeg)
コメントありがとうございます。
最近FitBoxingで頑張っているおかげで休日に執筆できる時間が取れそうです。
サグラダファミリアみたいに気長に更新頑張ります!
This is really very helpful for people who have not touched C++, looking forward to your update, thank you very much
![ポジTA](https://res.cloudinary.com/zenn/image/fetch/s--ljxHin2_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/53ed891cbe.jpeg)
Thank you for your comment!
Neither Blueprint nor C++ is better, so I'm going to build up the content so that I can use it properly.
I don't know when it will be released, but I would like to make it something that volunteers can update the content written for UE5 by the time UE6 comes out.
Please report any typos or incorrect content.
いつも参考にしています。C++触ったことがない自分にも理解しやすく、UEの可能性を広げる活動だと思います。もっと広まってコミュニティで自律的にこの活動がまわっていくと良いなと願っています。
![ポジTA](https://res.cloudinary.com/zenn/image/fetch/s--ljxHin2_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/53ed891cbe.jpeg)
コメントありがとうございます!
BlueprintもC++もどちらがいいという訳でもないので、使い分けができるような内容になるようにコツコツ積み上げて行きます。
いつ出るかは分かりませんが、UE6が出るころにはUE5で書いた内容を有志でアップデートできるようなものにしていきたいです。
誤字や誤った内容がありましたらご報告ください。
いつも参考にさせていただいています。
UEのC++解説では国内最高峰だと思います。
無料なのが申し訳ないです。
お忙しい中大変恐縮なのですが、もし可能であればGameplay Ability Systemの解説もお願いしたいです。
国内の解説はほぼありませんので…
情報が無さすぎて困っています…涙
![ポジTA](https://res.cloudinary.com/zenn/image/fetch/s--ljxHin2_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/53ed891cbe.jpeg)
コメントありがとうございます。
今回ゲームを作る内容を書きましたが、当面「Gameplay Ability System」に触れることは無さそうなのと、まだまだ安定していなさそうな内容なので書くとしたら2年後とかになりそうです
![佐藤さん](https://res.cloudinary.com/zenn/image/fetch/s--0yE1SsvM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/1b0899e82e.jpeg)
いつもUnrealC++の参考させていただいています。
気になった点があるので少し質問させていただきます。(場違いかもしれませんが...)
C++のEnhancedInputのページで、
void ACPPEnhancedInputTest::BeginPlay()
{
Super::BeginPlay();
// Input設定を行う
SetupInput(controller); // ココ
}
と記載されていますが、SetupInput関数は仮引数を持たないので、
void ACPPEnhancedInputTest::BeginPlay()
{
Super::BeginPlay();
// Input設定を行う
SetupInput(); // ココ
}
にはならないのでしょうか。
間違いだったら申し訳ございません。
よろしくお願いいたします。
追記
一番下のソースコードではなく、冒頭部分に出てくるcppファイルです。
![ポジTA](https://res.cloudinary.com/zenn/image/fetch/s--ljxHin2_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/53ed891cbe.jpeg)
ご指摘の内容で正しいです。
GitHubの方にアップしているソースコードでは正しかったので、
EnableInputの箇所をコピペしてしまってそのままになっているようです。
// PlayerControllerを取得する
APlayerController* controller = UGameplayStatics::GetPlayerController(GetWorld(), 0);
// 入力を有効にする
EnableInput(controller);
帰宅次第修正してコミットします。
ご指摘ありがとうございます!
また何か間違いがありましたらご連絡ください。
![ポジTA](https://res.cloudinary.com/zenn/image/fetch/s--ljxHin2_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/53ed891cbe.jpeg)
ご指摘して頂いた箇所修正しました。
大変助かりました。
ありがとうございました。
質問です。C++で開発するときにエンジンソースとシンボルは必要なのでしょうか?
こちらのページ で必要と書いてありますが、エンジンソースは「エンジンを改造したりエンジンのバグを直したい時」はもちろん必要で、シンボルは「windbg, cdb などシンボリックデバッガを使って挙動を調べたい」時などに使うのは承知しています。
でも、普通にあのテキストの内容を学んだり、普通にゲームを作る程度で使うのでしょうか?
と疑問に思ったのでそれらをインストールせずにVSのみをセットアップして簡単なコードを動かしてみたら、ちゃんと動かせましたしパッケージもできました。
もし「ここで使う」という例をご存じであれば教えていただけるとありがたいです。
ちなみに、これを疑問に思った理由は単純に「シンボルファイルが大きすぎるのでできれば入れたくないから」です。
このBookに出会ってから一気に理解が進みました。
本当にわかり易くて助かっています。
書籍化する予定はございますでしょうか?
現物で手元に置いておきたいと思うくらいの完成度なので是非お願いしたいです!
![ポジTA](https://res.cloudinary.com/zenn/image/fetch/s--ljxHin2_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/53ed891cbe.jpeg)
感想ありがとうございます!
印刷するとすごいページ数(1000ページ以上)といいお値段になってしまうので、今のところ書籍化の予定はございません。
なるべく最新版のUEで学習できるようにしたいので、GitHubでバージョン管理しています。
2024年に最新版へのアップデートと、ポインターやメモリ管理周りの内容を追記する予定です。
引き続き感想を頂けると幸いです。
![okadak](https://zenn-dev.github.io/default-avatars/dark/o.png)
今週、「動かす」の方のC++プログラムのパッケージ化まで終えることができました!
とてもわかりやすくて一見ハードルが高く感じてしまうUEのC++も怖がらず進めることができました!
これから何回も復習させていただきます。今後ともよろしくお願いいたします!
![ポジTA](https://res.cloudinary.com/zenn/image/fetch/s--ljxHin2_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/53ed891cbe.jpeg)
コメントありがとうございます!
基本的なところは抑えているので、模索しながらできることを少しずつ増やして楽しい作品を生み出してください。
「動かす」の方は来年くらいにはキャラクターをSkeletalMeshにしてAnimationBlueprintやAI周りに対応しようと考えています。
また更新した際には書いた内容を確認してみてください。
引き続きよろしくお願いいたします。
Unreal Engine 5で動かす C++ & Blueprintで現在Unreal Engineを勉強中の初心者です。
これだけ膨大な資料を公開いただき本当にありがとうございます。
Chapter39の【BP】Function(関数)の画像がどのブラウザ(Edge, Chrome, Firefox, Safari)でも読み込めず見られないのですが、確認いただけませんでしょうか。
こちらの環境が悪かったら申し訳ありません。
よろしくお願いします。
![ポジTA](https://res.cloudinary.com/zenn/image/fetch/s--ljxHin2_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/53ed891cbe.jpeg)
報告ありがとうございます!
私の環境でも見られないことを確認しました。
ローカルの環境では閲覧できているので、調査してみます。
少々お待ちください。
![ポジTA](https://res.cloudinary.com/zenn/image/fetch/s--ljxHin2_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/53ed891cbe.jpeg)
画像のフォルダ名「chap_02_bp-Function」に大文字の「F」が含まれていたのが原因でした。
フォルダ名を「chap_02_bp-function_」に修正してコミットしたら見られるようになりました。
またお気づきの点がございましたらご連絡いただけると幸いです。
ありがとうございました!
迅速な対応ありがとうございます!
ゲーム制作を学ぶのは初めてですが、ポジTAさんの本はとてもわかりやすく助かってます
一通り学習しつつやりたいことをつめていければと思います
![ポジTA](https://res.cloudinary.com/zenn/image/fetch/s--ljxHin2_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/53ed891cbe.jpeg)
こちらこそ書いた内容をあんまり振り返らず、書いていることをよく忘れているので大変助かりました。
他にもいろいろと書いていますので、お役に立つと幸いです。
日本語の書籍が終わった方にはUdemyの海外チュートリアルをおススメしています。
日本語に自動翻訳でも十分に理解できます。
C++に興味があればこちらの講座が非常におススメです。
他にもBlueprintだけで学べる講座もあるので、自分に合った次を見つけてください。
![UNREALized](https://res.cloudinary.com/zenn/image/fetch/s--jmU_q9Hp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/2f139afc01.jpeg)
備忘録としてさせていつも参考にさせていただいています。t
ポジTA様が書いてくださった本をベースとして私なりの本を作成しているのですが,ポジTA様の今後のご活動として,AIのビヘイビアツリーまたは強化学習LearningAgentsについて執筆予定はございますでしょうか.
お時間がございましたら教えていただけると幸いです.よろしくお願いいたします.
![ポジTA](https://res.cloudinary.com/zenn/image/fetch/s--ljxHin2_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/53ed891cbe.jpeg)
コメントありがとうございます!
「動かす」の続きで初学者向けのゲームロジックとしてのビヘイビアツリーは書くかもしれませんが、機械学習までは書かないと思います。
説明が大変な文法系はURLで飛ばしてしまって、専門的な内容を集中して書いてください。
是非読ませてください!
来年ぐらいまではC++の文法中心で、その後はGoFのデザインパターンとゲームデザインパターンをベースにした「設計する」を書く準備をしています。
![UNREALized](https://res.cloudinary.com/zenn/image/fetch/s--jmU_q9Hp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/2f139afc01.jpeg)
ご返信ありがとうございます!
承知しました!
出来上がりましたらぜひ査読をお願いします!
![ココアオレ](https://res.cloudinary.com/zenn/image/fetch/s--LYTjl1rt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/4ad6c89eda.jpeg)
こんにちは、UE の勉強として非常にお世話になっております。
誤字と改善案をいくつか確認したため共有いたします。
誤字
Chapter 11 & 50
-
JumpImpluse
→JumpImpulse
(英単語のタイポ)
改善案
Chapter 48 & Chapter 50
-
UObject
のインスタンスをTObjectPtr
ではなく通常のポインタが使用されていますが、TObjectPtr
を使用する形で統一されるのがよいかと思いました
![ポジTA](https://res.cloudinary.com/zenn/image/fetch/s--ljxHin2_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/53ed891cbe.jpeg)
誤字報告
ご報告ありがとうございます!
さっそく、文章とソースコードを修正しました。
画像とサンプルソースコードは次回メンテナンスする際に更新します。
Chapter 48 & Chapter 50
書いてから気付いたのですが、ご指摘通りUObjectのインスタンスは通常のポインタではなくTObjectPtrがただしいですね。
ソースコード側は直していたのですが、途中の説明が修正できていませんでした。
修正対応中です。
TObjectPtr<T> の運用
初期は全部TObjectPtr<T>で書いていました。
以下のご指摘をいただき、.cppファイル内で使用してる一時変数では通常のポインタに修正しました。
ご指摘内容を共有させていただきます。
UE5以降では、UObject派生クラス(つまり、GCの監視対象となるクラス)については生ポインタに代わって TObjectPtr<T> が利用されるようになりました。
しかし、以下のような利用は適切ではありません。
UE5 以降で代わったのは、UPROPERTY() メンバにおける UObject* の扱いです。この例のように、SpawnActor で処理中に作成された、非メンバ変数であるようなものを TObjectPtr<T> にする意味はありません。言い換えるなら、原則として TObjectPtr<T> を書くのは .h ファイルの UPROPERTY() だけであり、.cpp ファイルには登場しないのです。
ただし、例外もあります。たとえば、.h の UPROPERTY() で定義された TObjectPtr<T> なメンバを .cpp の処理で Find したり、range-based-for ****でループしたりする場合です。
以下は Lyra の例です。
ここでは .cpp で TObjectPtr<T> が利用されていますが、これはループしている ActionSets が UPROPERTY() なメンバ変数であり、型変換を行わずに値を取得してループするためという理由があるからです。
一時変数に TObjectPtr<T> を利用する必要は、その導入目的からしてもありません。
![ポジTA](https://res.cloudinary.com/zenn/image/fetch/s--ljxHin2_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/53ed891cbe.jpeg)
Chapter48とChapter50の指摘箇所を修正しました。
ご報告ありがとうござました!
Unreal Engine 5.4.4と Visual Studio Build Tools 2022をインストールして、VSCodeで作業される方々へのお知らせです。
.Net デスクトップビルドツールもインストールしてください。
MSVC v143のv14.38バージョンもインストールしてください。
そうしないと、
Visual Studio 2022 compiler version 14.41.34123 is not a preferred version. Please use the latest preferred version 14.38.33130
という現時点でのエラーが発生する可能性があります。
とにかく、本をよく読ませていただきました。^^
![ポジTA](https://res.cloudinary.com/zenn/image/fetch/s--ljxHin2_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/53ed891cbe.jpeg)
エラー報告ありがとうございます!
たしかにUEのBuild ToolがC#に変更されたから現在では.Netのライブラリが必要ですね。
ありがとうございました!
![alpha](https://res.cloudinary.com/zenn/image/fetch/s--UAO1wRzY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/0d21070070.jpeg)
すみません。Chapter 23ですが
このようにエラーが出てしまいます。
再起動したりvisual studio 2022を再インストールしたりしましたが治りませんでした。どうすれば良いでしょうか?
![ポジTA](https://res.cloudinary.com/zenn/image/fetch/s--ljxHin2_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/53ed891cbe.jpeg)
5.1の環境が手元に無かったので、5.5で確認しました。
Chapter23のソースコードで5.5でも動作を確認できました。
以下のソースコードで動くか確認してみていただいてもよろしいでしょうか。
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "CPPVariable.generated.h"
UCLASS()
class CPP_BP_API ACPPVariable : public AActor
{
GENERATED_BODY()
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
};
// Fill out your copyright notice in the Description page of Project Settings.
#include "CPPVariable.h"
#include "Kismet/KismetSystemLibrary.h"
// Called when the game starts or when spawned
void ACPPVariable::BeginPlay()
{
Super::BeginPlay();
// PrintStringノードと同じ処理
// UKismetSystemLibraryクラスのPrintString関数を呼び出す
UKismetSystemLibrary::PrintString(this, "C++ Hello World!", true, true, FColor::Cyan, 2.f, TEXT("None"));
}
エラーの情報を見てみると、CPPVariable.hの8行目で「末尾の;(セミコロン)が無くて」エラーが起きているみたいです。
WinMergeなどテキストの差分が見られる無料ツールで、動作したソースコードと比較してみていただいてもよろしいでしょうか?
WinMerge
![ポジTA](https://res.cloudinary.com/zenn/image/fetch/s--ljxHin2_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/53ed891cbe.jpeg)
CPPVariable.hの8行目のクラス名を設定する行が「class (プロジェクト名)_API ACPPVariable : public AActor」になっていないと似たようなエラーが発生しました。
プロジェクト名が「CPP_BP」として進んでいくように書いているので、「CPP_BP_API」となります。
class CPP_BP_API ACPPVariable : public AActor
「CPP_BP」とは別名のプロジェクト名になっていて、正しい名前「(プロジェクト名)_API」が使用されていない可能性もあるかと感じました。
![alpha](https://res.cloudinary.com/zenn/image/fetch/s--UAO1wRzY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/0d21070070.jpeg)
解決しました。
原因はプロジェクト名が違ったからでした。
お騒がせして申し訳ございませんでした。