Blueprintの入力ピン出力ピンに同じ名前をつけてはならない(付けれる時がある)
PIE、Standaloneでの実行では起こらないのにLaunchなどで本番ビルドを実行すると例外を吐いて終了してしまうようになっていたのが、解決したのでメモ。
現象
PIEではなんの問題もないのに、Launchで実行すると上記の箇所、\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp
の2082行目、UObject::execLocalOutVariable
内のOut = Out->NextOutParm;
のところでOutがnullptrであるために例外を送出してクラッシュしてしまう。
原因
問題のBlueprint関数は、入力ピンにもValue、出力ピンにもValue、と同名をつけていた。
解決してしまったあと、再現しようと同名を設定しようにも上図の通りはねられてしまうので、本来であればこのエディター上でのチェックで同名にならないよう保証されているようなんですが、何らかの手順を踏めばこのチェックをすり抜けて入力ピンと出力ピンに同名を与えることができてしまうようです。
そしてこの状態でもPIEでは意図通りに動作してしまうため、Launchするまで異常に気づかなく、メモリ破壊やタッチの差でインスタンスが制作されてないまま処理が流れてくる時がPIE以外ではある、などの別の原因を疑って全く無意味な検証で時間を無駄にする、というわけです。
Blueprintはできないことはそもそも描けないようになっているはずだから…とデバッガを接続して例外を吐いたノード名は把握しているのにそのBlueprint関数の記述に問題があるなどとは露ほども疑わなかったのが敗因でした。
入出力ピンに同名をつける手順は再現していません。どうやって付けたんだ…?