UE4においてC++のコンストラクタで生成したコンポーネントの詳細が消える現象についての検証
概要
下記画像のように、C++でのコンストラクタで生成したコンポーネントの詳細が消えることがたまにあります。
これはブループリントエディタ、レベルエディタ上の両方で生じます。
対処法としてアクタのブループリントの親クラスを一旦他のものに切り替えて戻すと治りますが、パラメータが吹っ飛ぶので手間です。
今回はその原因について検証してみました。
検証内容
コンストラクタでリネームしたりコンポーネントの種類を変えたりしたときによく起こる気がするので、
それぞれの状況についてどのような挙動をするのか確かめてみます。
今回試すのは
- 変数名のリネーム
- コンポーネントの名前のリネーム
- コンポーネントのクラスの変更
となります。
検証
まずはリネームなどをする前の状態です。
// ルートシーン
rootScene = CreateDefaultSubobject<USceneComponent>(FName(TEXT("RootScene")));
RootComponent = rootScene;
// 変数名を変えるコンポーネント
before = CreateDefaultSubobject<USceneComponent>(FName(TEXT("TestSceneName")));
before->SetupAttachment(RootComponent);
// コンポーネント名を変えるコンポーネント
testSceneComponent = CreateDefaultSubobject<USceneComponent>(FName(TEXT("BeforeComponentName")));
testSceneComponent->SetupAttachment(RootComponent);
// コンポーネントのクラスを変えるコンポーネント
componentChange = CreateDefaultSubobject<USceneComponent>(FName(TEXT("ComponentChange")));
componentChange->SetupAttachment(RootComponent);
このクラスを継承したアクタを生成してみます。
この時点では当然ですが、各コンポーネントとの詳細パネルを確認できます。
次に各コンポーネントをリネームなどをしてみます。
// ルートシーン
rootScene = CreateDefaultSubobject<USceneComponent>(FName(TEXT("RootScene")));
RootComponent = rootScene;
// 変数名を変えるコンポーネント
after = CreateDefaultSubobject<USceneComponent>(FName(TEXT("TestSceneName")));
after->SetupAttachment(RootComponent);
// コンポーネント名を変えるコンポーネント
testSceneComponent = CreateDefaultSubobject<USceneComponent>(FName(TEXT("AfterComponentName")));
testSceneComponent->SetupAttachment(RootComponent);
// コンポーネントのクラスを変えるコンポーネント
componentChange = CreateDefaultSubobject<UBoxComponent>(FName(TEXT("ComponentChange")));
componentChange->SetupAttachment(RootComponent);
変更点は以下のとおりです。
- 変数名before→afterに
- コンポーネント名BeforeComponentName→AfterComponentName
- コンポーネントのクラスをUSceneComponent→UBoxComponent
結論
変数名は同じでコンポーネント名を変えると詳細パネルの表示が消えてしまうようです。
コンポーネントの内容がコンポーネント名をベースに保存されているからでしょうか。
コンポーネントの名前を変えるときは変数名も変えるなどをすれば起きなくなるのでそうするのが吉かもしれません。
もし詳細が消えてしまった場合も、コンポーネントの名前をもとに戻せば復活します。
逆に考えると、古いコンポーネントの名前で設定した内容が残っているかと思うとやや不安ではありますね…。
名前はよく考えて決めたほうが良さそうです。
Author And Source
この問題について(UE4においてC++のコンストラクタで生成したコンポーネントの詳細が消える現象についての検証), 我々は、より多くの情報をここで見つけました https://qiita.com/mt_khmer/items/58dc235ee8ffb0b22686著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .