妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

ボンヂャーラビット強制射出事件(容疑者確保編)

「次はアイテムを拾うところを調べてみる」

f:id:una_unagi:20151118203930p:plain

「持つのと捨てるので線が絡まってるけど、単にGETノードを共有してるだけだから、内容的には別かな」

妹「たしか、えび天側で、主人公キャラとoverlapすると、主人公のアタッチターゲット変数にselfを入れる仕組みになってて、ボタンを押すとそのアタッチターゲットのアクターを子扱いにして、手の位置に移動させる仕組みだったと思う」

「とりあえず順番に処理を削っていって、どういう変化が起きるか調べる。普通のプログラムだとこういう時、徐々に消していったり、行の最初に記号を入れて行全体をコメント扱いにしたりするんだけど、ブループリントの場合は白い線の接続を切ってしまうのがいい」

妹「そんなことしたらちゃんと動かなくなるのでは?」

「そうなんだけど、まずは原因の特定が大事だから。少々変になっても、今調べてる吹っ飛び事件と関係がなければ無視して、末尾のが省けなければ途中のも省いて、とにかく最小限のプログラムにしていく」

妹「一番最後にあるのは"アイテムを持っている"変数をTrueにするやつか。さすがにこれは吹っ飛びと関係してないと思うけど」

「そういうのこそ確認していく。アイテムを捨てられなくなったりはするけど、それ以外は特に影響がない。吹っ飛びも引き続き起きる。想定内の変化で、つまりこのノードは事件に関係ないということがわかる」

妹「それで最後まで残ったやつが犯人ってこと?」

「たいていの場合はそこまでいかずに原因の見当がついてくるもんだけど……末尾から2つ目のSetActorLocationの接続を切っみてた面白いことが起きた」

f:id:una_unagi:20151118210022p:plain

「持とうとしたえび天が、ラビットの位置にワープしてる。これでラビットが変な反応したんだね」

妹「SetActorLocationが悪いってこと?」

「SetActorLocationを外してもワープしてるんだから、むしろそれ以外が悪いというか。なんでここにSetActorLocationがあるの?」

妹「そういえば……AttachActorToActorをした時に、くっつくけど場所が違うというか、ソケットの位置と全然違うとこに出るから、その位置合わせをしたんだよ」

「全然違うところに出るというのが、位置関係としてたまたまラビットが歩いてる場所で、坂の途中でぶっとぶのもそこが坂だからじゃなくて、えび天が出る位置だったってことか。SetActorLocationであるべき場所に戻してはいるけど、戻すまでの一瞬の間でもコリジョン判定があるみたい」