はじめに
この記事は2026/01/17に開催されたUEC++勉強会のアーカイブメモです。
筆者が録画をミスって音声を取れていなかったため、抜け、漏れ、語彙漏れによる意味違いがある可能性があります。
もしこれは間違いがやばい…!というものがあればお知らせください
本編
プロジェクトを作るならBP?C++?
最初はBPで作ってC++クラスを追加してC++対応にする方が良いらしい
なんでもキャラクターとか一部のクラスがC++として作成されてしまうからとか
追記(26/01/21)
テンプレート(サードパーソンなど)をC++で作成するとデフォルトで準備されていたThirdPersonCharactorなどがC++で作られるって話っぽいです

C++のプロジェクトはIDE(例:Visual Studio など)から起動しましょう
え?仕事で一回も使ったことなかったが?という顔をしながら聞いてた。
IDEからUEを起動するかどうかで挙動が違うらしい。そんなの知らんて(※みんなやっていました)
(画像をお借りしました。チャット欄で張ってくださった方ありがとうございます)
IDEとかいうの
IDE:
Visual Studio
Rider
広義のIDE(エディタ):
Visual Studio Code
とかのこと。
参加者はRiderとVSの採用率は半々~ややRiderの方が高め?
UE的にはIDEは何でもいいらしい。
セットアップ
Visual Studio をセットアップする
Rider Setup Guide
UEのエディタの環境設定のソースコードからどのIDEを使用するか指定できる

Riderは商用利用が有料なのと、資料自体が少ない印象があるので初心者的には環境整備のハードルが高い気がしました。(Riderの方が補助機能は手厚いらしいけど)
モジュールについて
モジュール=Source/MyGameのフォルダのことではない(重要)
正確な語彙起こしが難しいが、プロジェクト(※)の中に作られる拡張機能キットのようなもの?
※プロジェクト=UEを起動したときに作れるプロジェクト/プラグイン/UEEdior のような。VSのプロジェクトは関係ない
例えば、UEEditor自体にもたくさんのモジュールが準備されている(通常BPでは触れないものもある)
モジュールをまたぐと.hのパブリック公開やらBuild.csへの追記やらいろいろ必要になる。
モジュールがどう振る舞うか(エディタとかランタイムとかどこのなんのモジュールを使えるようにするかとか)はBuild.csが管理してるっぽい(そしてビルドするときに使う)
プラグインとモジュールは拡張的な意味では似てるけど異なるもの。
onionmarktwoさんによるメモ
Module について補足を書いてみました
Module については、視点を分けて考えると理解しやすいと思います
Engine 作者 or Plugin 作者視点
Engine ユーザー視点
Engine 作者 or Plugin 作者視点:
Engine 作者 or Plugin 作者は、色々な理由で Module を分けている。理由は Plugin を作りたくなるまで気にしなくて(多分)大丈夫
Engine ユーザー視点:
Module とは、「Engine 作者 or Plugin 作者が提供してくれる、機能の単位」です
Module を使いたい場合、 {MyProject}.Build.cs の PublicDependencyModuleNames に指定します
例えば、 UMG を使いたいときは PublicDependencyModuleNames.AddRange(new string[] { ..., "UMG" }); と UMG を追加します
unresolved external symbol というエラーは、だいたいこれで解決できることが多いです
{MyProject} の部分は、実際の自分のプロジェクト名が入ります
高度な開発をしない限り、自分で(Plugin以外で) Module を作ることは無い (たぶん。 誤ってたらごめんなさい)
例えば Lyra でさえも、 LyraGame と LyraEditor の2つの module しか作っていません
Lyra は Plugin という形では、多数の module があります
気にしなくて良いこと:
{MyProject} も PrimaryModule という形で Module を作ります。(その意味で 「自分で Module を作ることはない」は誤り。)が、これは最初は意識しなくて良いことだと思います
「Module とは機能の単位」 と書いたのは、厳密には誤りです。厳密に書けば "set of functionality, with public interface and compile environment" (https://dev.epicgames.com/documentation/en-us/unreal-engine/module-properties-in-unreal-engine) のような概念らしいです
コンテンツフォルダに作られたBPとsource/Mygame下のC++は同じモジュール?
A.同じモジュール(BPが特別扱いっぽいが)
つまりsource/Mygameの.hをパブリックにする必要って
A.ほぼない
パブリックとかプライベート
↑のモジュールが外部(自分ではない)モジュールから.hを#Includeできるかどうかって話。
.h(ヘッダ)とか.cpp(ソース)とか
.h(ヘッダ)は.cpp(ソース)になにが書いてるかどうかの索引
.cpp(ソース)は実装(イベントグラフに近い)
#Includeについて
#Includeした先の.hの中身が直接そこに展開されるイメージ
#pragma onceって
↑のように.hは.hの内容が展開されるので2重に出てくることもある。それを何回も実行することを防ぐ
.generated.hって
UHT(Unreal Header Tool)が自動で作る.h。Intermediateにいる。詳しくはビルドのあたりで。
絶対に最後にIncludeされないといけない。
ビルドについて
ビルドの工程について
ビルドと一言で言っても内部ではいろいろ動いている
ビルドを押す
↓
UBT(Unreal Build Tool)が命令を出す
↓
UHT(Unreal Header Tool)がgenerated.h/UCLASS/GENERATED_BODY/UPROPERTYなどUE独自のコードを普通のC++に変換する
↓
コンパイル(.hなどが存在しているかなどチェックする)オブジェが作られる?
↓
リンク(オブジェを実際に動ける状態にくっつける)
↓
バイナリができる(UEなどで動く状態になる)
なのでビルドするときのエラーは主に
・コンパイルエラー(そもそも.hがないとか引っ張ってこれないとか)
・リンクエラー(コンパイルは通ったけど実際には問題があった?状態など)
の2つがある
↓おすすめの資料(p17~p26)
ビルドの種類
ビルド→差分の成果物を出す
リビルド→いままでのもの全部消して再度成果物を全部計算する
クリーン→成果物の削除
ソリューション→そもそもソリューションがVS限定の考えっぽい
UEのライブコーディングのビルド→成果物は出るけど成果物を焼き付けない?保存しない?仮で使える?状態なので終了すると消える。なのでIDEでビルドしろと言われる
Generate Visual Studio project Files
まずVS限定の話(ほかのIDEを使ってると名前が変わる)
UBTとかのUE系のものとIDEの結び付けを作り直すらしい(ので普通はやらない)
他独特のUE専用C++用語
####(プロジェクト名)_API
プロジェクト名の目印みたいなやつ
AMyActorのA
UEの特殊ルールの接頭辞
| A | U | F | T | I | E | S | W/U | Fslate |
|---|---|---|---|---|---|---|---|---|
| Actor | UObject | Struct | Template | Interface | Enum | Slate | Widget | Slate Struct |
| Actor | GC管理されるオブジェクト | 軽量データ構造 | テンプレート型 | c++インターフェース | 列挙子 | SlateUIウィジェット | UMGWidget | Slate用構造体 |


