UFUNCTIONのDevelopmentOnlyについて

UFUNCTIONにつけるmeta=(DevelopmentOnly)について質問させてください。

<br/>

まずこの機能を有効にするにはプロジェクト設定でCompile Blueprints in Development ModeをFalseにする必要があるということでよいでしょうか。

これをFalseにしないとShippingビルドでもノードは動作しているようでしたので確認させてください。

またDevelopmentビルドでも?このフラグをFalseにするとノードは動作しなくなるようでした。

<br/>

次にこの機能で無効化されるのはノードだけで、C++側のコードは特に無効化されないという認識でよいでしょうか。実際に動作していたことは確認出来ました。

つまり本当にその関数をShippingで空にしたいのであれば#if !UE_BUILD_SHIPPING で中身の実装をなくす必要があると思っております。

そうなのであればDevelopmentOnlyを指定する意味があまりないように感じているのですが、DevelopmentOnlyもつけることでノード用の関数が生成されないなど何か更に減らせるものがあるでしょうか。

それであれば両方対応したいと考えております。

なお値を返す関数がどのような値を返すのかを確認したところ、int32は0を返していましたがboolはtrueを返すようでした。これが意図通りなのか少し気になっております(falseを返すと思っておりました)。

<br/>

お手数ですが、ご確認いただけると幸いです。

<br/>

> まずこの機能を有効にするにはプロジェクト設定でCompile Blueprints in Development ModeをFalseにする必要があるということでよいでしょうか。

はい。バイナリコンフィグの指定に関わらず、Compile Blueprints in Development Modeの設定値だけで動作が変ります。

> 次にこの機能で無効化されるのはノードだけで、C++側のコードは特に無効化されないという認識でよいでしょうか。実際に動作していたことは確認出来ました。

はい。ご調査いただいた通り、ブループリントのコンパイルに影響を与えるだけで、C++のコードには影響を与えません。

> ​そうなのであればDevelopmentOnlyを指定する意味があまりないように感じているのですが、DevelopmentOnlyもつけることでノード用の関数が生成されないなど何か更に減らせるものがあるでしょうか。

ブループリント実行時にノードに対応するC++側のコードが呼び出されなくなります。​関数内の実装が “#if~#endif” で省略されていれば空の関数呼び出しのコストのみの差となるはずです。

> なお値を返す関数がどのような値を返すのかを確認したところ、int32は0を返していましたがboolはtrueを返すようでした。これが意図通りなのか少し気になっております(falseを返すと思っておりました)。

​無効化されたノードの戻り値に関しては具体的な定義はなく保証はありません。このようなプロパティにアクセスすることは危険なのでアクセスしないようにして頂くことをお勧めします。

ご返答ありがとうございます。

それでは一旦#if~#endifで囲む対応をしようと思います。