ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
Unreal Engine 5(UE5)でブループリント(BP)の詳細パネルにコンポーネントが「C++で編集」と表示される場合、そのコンポーネント自体の追加・削除・置き換えはC++側で固定されていますが、各プロパティの値はブループリント側の詳細パネルから変更できます(プロパティに編集を許可する指定子が付いている場合)。本記事では、なぜ編集不可に見えるのか、そしてブループリントで何をどこまで編集できるのかを整理します。
この記事の要点
- 「C++で編集」表示は、そのコンポーネントがC++のコンストラクタで生成(CreateDefaultSubobject)された継承コンポーネントであることを示します。コンポーネント枠そのもの(追加・削除・差し替え)はBPでは操作できません。
- 一方で、そのコンポーネントの個々のプロパティ値は、詳細パネルで変更できる場合があります。編集できるかどうかは、C++側で各プロパティに付けたUPROPERTY指定子次第です。
- プロパティをBPで編集可能にするには、C++側でそのプロパティに
EditAnywhereやEditDefaultsOnlyを付けます。VisibleAnywhereは表示のみで、グレーアウトして編集できません。 - コンポーネントの参照ポインタ自体は
VisibleAnywhere/BlueprintReadOnlyにするのが一般的な作法です。これはポインタの差し替えを禁止するだけで、コンポーネント内部のプロパティ編集を妨げるものではありません。 - BPで完全に制御したい場合は、C++側の指定子を見直すか、コンポーネント構成そのものを再設計します。
11. 「C++で編集」と表示される仕組み
UE5でC++のアクタ(Actor)クラスを継承してブループリントを作成すると、親クラスのコンストラクタで生成されたコンポーネントは、子ブループリントのコンポーネントツリーに継承コンポーネントとして現れます。これらの枠には「C++で編集」といった旨のラベルが付き、ブループリントエディタ上ではコンポーネントの追加・削除・差し替えができない状態になります。
これは、コンポーネントの生成元がC++のコンストラクタにあるためです。典型的には、次のように CreateDefaultSubobject で生成されたコンポーネントがこれに当たります。
// ヘッダ(.h)でのコンポーネント宣言 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Mesh") UStaticMeshComponent* BodyMesh;
// コンストラクタ(.cpp)での生成 BodyMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("BodyMesh")); |
ここで重要なのは、「枠(コンポーネントそのもの)が固定されていること」と「枠の中のプロパティ値が編集できるかどうか」は別の話だという点です。継承コンポーネントの枠はBPで操作できなくても、その内部プロパティ(メッシュ、マテリアル、トランスフォーム、各種設定値など)は、指定子次第で詳細パネルから変更できます。
22. なぜ編集できないように見えるのか
「C++で編集」と表示されたコンポーネントを選んでも、詳細パネルのプロパティがグレーアウトして変更できないことがあります。多くの場合、理由は次のいずれかです。
- そのプロパティのUPROPERTY指定子が
VisibleAnywhere(またはVisibleDefaultsOnly/VisibleInstanceOnly)になっており、表示専用として定義されている。 - そのプロパティに
UPROPERTY自体が付いておらず、エディタに公開されていない(詳細パネルに項目が出ない)。 - 編集しようとしている文脈(クラスのデフォルト編集 vs 配置インスタンス編集)と、指定子(
EditDefaultsOnly/EditInstanceOnly)が噛み合っていない。
つまり「C++で編集」という表示は、必ずしも「BPでは一切いじれない」という意味ではありません。コンポーネント枠の追加・削除がC++管理であることを示すラベルであり、内部プロパティが編集できるかどうかは、各プロパティの指定子で決まります。
33. ブループリントの詳細パネルでできること
継承コンポーネントを選択した状態で、ブループリント側では主に次のことが行えます。
- 編集が許可されている(
EditAnywhere/EditDefaultsOnlyなど)プロパティのデフォルト値を変更する。例:スタティックメッシュの差し替え、マテリアルの割り当て、コリジョン設定、相対位置・回転・スケールの調整など。 - 継承コンポーネントを親(ルート)として、その子に新しいコンポーネントを追加する(追加した子コンポーネントはBP管理になります)。
- イベントグラフ上で、そのコンポーネントを参照してロジックを組む(ポインタが
BlueprintReadOnlyでも参照は可能です。差し替えができないだけです)。
一方で、継承コンポーネント枠そのものの削除や、別の型のコンポーネントへの差し替えはBPからは行えません。これらが必要な場合はC++側の構成変更が必要になります。
44. C++側でプロパティをBPに公開する
BPの詳細パネルでプロパティ値を編集できるようにするには、C++側で各プロパティに編集を許可する指定子を付けます。代表的な指定子は次の通りです(公式ドキュメントの定義に基づきます。詳細はバージョンの公式リファレンスで確認してください)。
| 指定子 | 詳細パネルでの挙動 |
|---|---|
EditAnywhere | BPのクラスデフォルトでも、レベルに配置したインスタンスでも値を編集可能。 |
EditDefaultsOnly | BPのクラスデフォルトでのみ編集可能。配置インスタンスでは編集不可。 |
EditInstanceOnly | 配置インスタンスでのみ編集可能。クラスデフォルトでは編集不可。 |
VisibleAnywhere | 表示のみ。BPでもインスタンスでも値は変更できない(グレーアウト)。 |
例えば、これまで編集できなかった値をBPで調整できるようにするには、次のように VisibleAnywhere を EditAnywhere に変更します。
// 変更前:表示のみ(BPで編集不可) UPROPERTY(VisibleAnywhere, Category = "Settings") float ExampleValue;
// 変更後:BPのデフォルト・インスタンスの両方で編集可能 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Settings") float ExampleValue; |
ここで BlueprintReadWrite は、詳細パネルでの編集可否ではなく、イベントグラフのノードから読み書きできるかを制御する指定子です。詳細パネルでの編集は Edit... 系、グラフからのアクセスは Blueprint... 系と、役割が分かれている点に注意してください。
コンポーネント参照そのものの指定子について
コンポーネントへの参照ポインタ自体は、CreateDefaultSubobject で生成する場合、慣例として VisibleAnywhere / BlueprintReadOnly を用います。これは「ポインタを別のコンポーネントに差し替えられないようにする」ためのもので、コンポーネント内部のプロパティ編集を禁止するものではありません。内部プロパティが編集できるかどうかは、あくまでそれぞれのプロパティに付いた指定子で決まります。
// 参照ポインタは VisibleAnywhere/BlueprintReadOnly が無難 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Mesh") UStaticMeshComponent* BodyMesh; |
55. BPで完全に制御したい場合の見直し
コンポーネントの追加・削除や差し替えまで含めてBP側で管理したい場合は、C++のコンストラクタでコンポーネントを固定生成する方針自体を見直すことを検討します。
- C++クラスを基底にしてBPで構成する:共通のロジックや必須プロパティだけをC++の基底クラスに持たせ、コンポーネントの組み立ては子ブループリント側で行う設計にすると、コンポーネント構成をBPで自由に変更できます。
- 編集の必要があるプロパティだけ公開する:すべてを公開する必要はありません。デザイナーが触る値だけ
EditAnywhereにし、内部実装用の値は表示専用にすると、誤操作を防げます。 - カテゴリで整理する:
Category = "..."を付けると、詳細パネル上でプロパティがグループ化され、どの値がBPで編集可能かを把握しやすくなります。
66. よくある落とし穴
| 注意したいポイント |
|---|
|
77. よくある質問(FAQ)
Q1. 「C++で編集」と出ているコンポーネントは、ブループリントでは一切いじれないのですか?
いいえ。コンポーネント枠そのもの(追加・削除・型の差し替え)はC++管理のため操作できませんが、内部のプロパティ値は、C++側で編集を許可する指定子(EditAnywhere など)が付いていれば、詳細パネルから変更できます。
Q2. BlueprintReadWrite を付ければ詳細パネルで編集できるようになりますか?
必ずしもそうではありません。詳細パネルでの編集可否を決めるのは Edit... 系の指定子です。BlueprintReadWrite は、イベントグラフのノードからそのプロパティを読み書きできるかを制御するものです。詳細パネルで編集したいなら EditAnywhere などを併せて付けます。
Q3. C++を編集できない(ソースを変えられない)状況で、値をどうにか変えたい場合は?
その値に編集を許可する指定子が付いていれば、詳細パネルで変更できます。付いていない場合、エディタからその値を直接変更する手段はありません。ロジックで上書きできるケース(公開された関数経由など)もありますが、確実な対応はC++側で指定子を見直すことです。自身でソースを変更できない場合は、提供元に指定子の追加を相談するのが現実的です。
88. まとめ
「C++で編集」表示は、コンポーネントがC++のコンストラクタで生成された継承コンポーネントであることを示すもので、枠の追加・削除こそBPではできませんが、内部プロパティの値はBPの詳細パネルから編集できます。編集できるかどうかは、C++側で各プロパティに付けたUPROPERTY指定子(EditAnywhere / EditDefaultsOnly / VisibleAnywhere など)で決まります。BPで触りたい値には編集を許可する指定子を付け、参照ポインタは差し替え防止のため VisibleAnywhere / BlueprintReadOnly にするのが基本です。完全にBPで構成を制御したい場合は、コンポーネントの生成方針そのものを再設計するとよいでしょう。各指定子の正確な挙動はUE5のバージョンによって細部が異なる場合があるため、最終的には利用中バージョンの公式ドキュメントで確認することをおすすめします。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- ブループリントで途中から親クラスを指定する方法
- C++で編集となっているコンポーネントをブループリントで編集する方法
- Boolean変数の初期値を変更する方法
- ブループリントで特定のキーが押された時にイベントを発火させる方法
- ブループリントで配列からインデックスを指定して取得する方法
- Blueprintで「Esc」キーを使ってイベントを発生させる方法
- Blueprintで「Cast To」を使い、複数のクラスに対応する方法
- Blueprintで指定した確率で処理を分岐させる方法
- FrameGrabberをBlueprintで使用する方法
- ブループリントで現在日時を取得する方法
- Enhanced Input とは?Input Action と Input Mapping Context の基本
- Enhanced Input でキー入力を受け取る手順
- 旧 Input Mappings から Enhanced Input へ移行する方法
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 Spring Frameworkのアノテーション一覧
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- PHP $_SERVERとは|DOCUMENT_ROOT・PHP_SELFなど主な要素 2026-08-07 17:15:57
- PHPでのファイルアップロード方法|multipart/form-dataと$_FILES 2026-08-07 17:15:57
- Scratchのアカウントの作り方|メールアドレスとユーザー名の登録手順 2026-08-07 17:15:57
- Bluetoothとは|仕組み・BLEとClassicの違い・用途 2026-08-07 17:15:57
- Spring Bootのテスト入門|@SpringBootTestとJUnitでの単体・結合テスト 2026-08-07 17:15:57
- djangoにおけるMVCアプリケーション実装例 2026-08-07 17:15:57
- Scratch 作品の公開方法 2026-08-07 17:15:56
- 【PHPフレームワーク】Laravelの使い方 2026-08-07 17:15:56
- Google OAuth 2.0 認証の実装方法 2026-08-07 17:15:56
- APIキー取得方法 2026-08-07 17:15:56
- インストール方法(Windows版) 2026-08-07 17:15:56
- Java とは?言語仕様・JVM・主要フレームワーク一覧 2026-08-07 17:15:56
- データベースとは?RDB / NoSQL / SQL の基礎 2026-08-07 17:15:56
- インストール(eclipseプラグイン) 2026-08-07 17:15:56
- Spring Frameworkの使い方 2026-08-07 17:15:56
コメントを削除してもよろしいでしょうか?