Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】[UE] ClassRedirects

2025年09月15日に「Dev.to」が公開したITニュース「[UE] ClassRedirects」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Unreal Engineでクラス名を変更すると、参照するブループリントの親クラスが壊れる問題がある。これを解決するには、DefaultEngine.iniファイルにClassRedirectsを設定し、ブループリントを再コンパイル・保存する。その後、設定を削除して動作を確認する。

出典: [UE] ClassRedirects | Dev.to公開日:

ITニュース解説

Unreal Engine (UE) は、主にゲーム開発をはじめとするインタラクティブなアプリケーション制作で広く利用されている、非常に強力なソフトウェア開発環境だ。このUEを使ってアプリケーションやゲームを開発する際、プログラミングの「クラス」と、UE独自の視覚的なプログラミングシステムである「ブループリント」という二つの重要な要素が頻繁に用いられる。

クラスとは、プログラミングにおける設計図やひな形のようなものだ。例えば、ゲーム内のキャラクターやアイテム、あるいはゲームの進行を管理するシステムなど、様々な要素の基本的な振る舞いやデータを定義するためにC++というプログラミング言語で作成されることが多い。一方でブループリントは、これらのクラスを基にして、プログラミングコードを書かずに、視覚的にノード(箱のようなもの)を繋いでロジックを構築できるシステムだ。プログラミングの専門知識がなくても、複雑な機能を実現できるため、多くの開発者に利用されている。

ブループリントは、既存のクラスを「親クラス」として指定し、その親クラスの持つ機能や特性を「継承」して作られることが多い。これにより、親クラスの機能をそのまま利用したり、独自の機能を追加して拡張したりできる。この関係は、より汎用的な設計図(親クラス)を基にして、特定の用途に特化した設計図(ブループリント)を作成するようなものだと考えると理解しやすいだろう。特定の設計図は汎用設計図の基本的な要素を持ちつつ、さらに独自の要素を追加できる。

ここで問題となるのは、開発の途中で既存のクラスの名前を変更したり、そのクラスが属するモジュール(関連するクラスや機能のまとまり)の名前を変更したりする場合だ。もし、変更前の古いクラス名を親として参照しているブループリントが多数存在すると、そのブループリントは新しい名前を認識できないため、「親クラスを見失って壊れてしまう」という事態が発生する。これは、ブループリント側からすれば、自分の親がいなくなってしまったかのように感じるため、エラーが発生し、正しく動作しなくなる状況を指す。

このような状況を解決するために、Unreal Engineには「クラスリダイレクト」という機能が提供されている。これは、UEの内部システムに対して「もし古いクラス名を探しているものがあれば、実際にはこの新しいクラス名を参照するように」という指示を与える仕組みだ。つまり、古い名前から新しい名前への「転送ルール」を設定することで、ブループリントが親クラスの名前が変わったことをスムーズに受け入れられるようにする。

この転送ルールは、UEのプロジェクト設定ファイルの一つである「Config/DefaultEngine.ini」に記述する。「DefaultEngine.ini」は、Unreal Engineの挙動や各種設定をカスタマイズするための重要なファイルで、テキストエディタで編集できる。

具体的な設定方法は以下のようになる。まず、「DefaultEngine.ini」ファイルを開き、その中に[CoreRedirects]というセクションを追加するか、もし既に存在すればそのセクション内に設定を記述する。[CoreRedirects]は、UEの基本的なリダイレクト設定を記述するためのセクションだ。

そして、このセクションの中に、以下のような形式でリダイレクトの記述を追加する。 +ClassRedirects=(OldName="ClassA",NewName="ClassB")

この記述の意味を説明する。 +ClassRedirectsは、クラスのリダイレクトを指定するための項目だ。行頭の「+」は、この設定を追加するという意味を持つ。 OldName="ClassA"は、変更前の古いクラス名を指定する部分だ。もしゲーム内で「ClassA」という名前のクラスを参照しようとしている箇所があれば、それがリダイレクトの対象となる。 NewName="ClassB"は、変更後の新しいクラス名を指定する部分だ。OldNameで指定されたクラスが参照された際に、実際にはこのNewNameで指定されたクラスを参照するように指示される。 つまり、この設定は「かつてClassAという名前で存在していたクラスは、今はClassBという名前になっているので、ClassAを参照しようとしている場合はClassBを見てください」という明確な指示をUEのエンジンに与える。

この設定を「DefaultEngine.ini」ファイルに追加した後、次のステップに進む。まず、Unreal Engineのエディタを起動する。エディタが起動すると、内部的に「DefaultEngine.ini」に記述されたリダイレクトルールが読み込まれる。この状態で、変更前のクラス名を参照していたすべてのブループリントを開き、それぞれを「再コンパイル」して「保存」する作業が必要だ。再コンパイルとは、ブループリントの内部ロジックを再度構築し直すことで、この際にリダイレクトルールが適用され、ブループリントは古い親クラス名ではなく、新しい親クラス名を正しく認識して記憶し直す。すべての関連するブループリントが新しい親クラス名を記憶し、保存が完了したら、エディタを一度終了する。

すべてのブループリントが新しい親クラス名を記憶し終えた後、再び「DefaultEngine.ini」ファイルを開き、先ほど追加した+ClassRedirects=(OldName="ClassA",NewName="ClassB")の行を削除する。このリダイレクト設定は、ブループリントが新しい名前を覚えるための一時的な橋渡し役だったため、役割を終えれば削除するのが適切だ。なぜなら、リダイレクト設定をそのまま残しておくと、将来的に無駄な処理が常に発生し、エンジンのパフォーマンスにわずかながら影響を与えたり、他の開発者が混乱したりする原因となる可能性があるからだ。

設定を削除した後、最後にUnreal Engineのエンジンを再度起動する。この状態で、以前変更前のクラス名を参照していたブループリントが、新しいクラス名を持つ親クラスを正しく認識し、問題なく動作するかどうかを確認する。もし正しく動作すれば、クラス名変更によって発生する親クラスの参照切れ問題は完全に解決されたことになる。この一連の作業は、開発中のプロジェクトにおいて、コードの整理やリファクタリングを安全に進めるために非常に重要な手順だ。

関連コンテンツ