妹でもわかるUnrealEngine4

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

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

Construction Scriptを、アクターのドラッグ中に実行させない方法

f:id:una_unagi:20180411214914p:plain

「昨日やったやつなんだけどね、あれやっぱり上手くいってなかったよ……」

妹「えーーーー!!」

imoue.hatenablog.com
実は上手く言ってなかったやつ

「結局、マウスを離した時点では、グリッドからずれた位置にあって、その後直ってないんだよね、よく考えると。まあoldPosition変数にグリッドに合わせた場合の位置情報はあるから、BeginPlayの時にそれ使って合わせてもいいけど、それだったら最初からBeginPlayで位置合わせすればいいというか」

妹「BeginPlayだと、エディタ上で確認できないから、なんかやだな」

「折角Construction Scriptがあるからね。そういうのがないゲームエンジンだとそうするしかないけど。RetriggerableDelayでしばらく待つ方法も、ConstructionではDelay出来ないので無理」

forums.unrealengine.com

「と考えていたところで発見したのがこの質問。アクターをドラッグして動かしてる時に、普通はConstructionScriptが何回も作動するけど、それを止める方法はないのか? という話。それがあった」

f:id:una_unagi:20180411215818p:plain

「こうするとマウスを離した時に位置合わせするし、移動中に勝手に元の位置に戻ることもないと。いったん離してみるまで確定できないっていう問題はあるけど」

妹「それぐらいだったら許容範囲内。エディタ上で適当に動かしても、ちゃんと自分用グリッドに合わさるわけだから。OK、OK」

「ブループリントのクラスの設定でチェックを入れておけば、Construction Scriptの方は前々回のやつと同じでいい」

imoue.hatenablog.com
前々回のやつ

「本当はConstructionScriptの中で、マウスで移動させてる所かどうかで分岐できれば、昨日の仕組みと複合してもっとピッタリして処理ができそうだけど、それは方法がわからなかった」

プロシージャルでグリッドに合わせる足場……をさらに改良(失敗版)

※追記
この方法だと上手くいきません。よくみたらグリッドからズレてました。

正しく対応する方法はこちらに
imoue.hatenablog.com


f:id:una_unagi:20180410235950g:plain
昨日のやつを動かすとこうなる

imoue.hatenablog.com

妹「マウスでシュッと動かした場合は、動くんだけど、少しだけだと全然動かない。これってUE4側でグリッドをONにするしかないの?」

「いくつか解決する方法はあるけど、例えばコンストラクションスクリプトの位置合わせしてるところを、こういう風に改良してみる」

f:id:una_unagi:20180411000227p:plain

「なんで動いたり動かなかったりするかというと、ちょっと動かすだけだとグリッドが効いて元の位置に戻る。シュッと動かすとグリッドで調整しても元とは違う場所になる。このちょっと動かした時が問題になる。UE4側でグリッドをONにすると大丈夫なのは、ちょっと動く状態がそもそも起きなくなるからで」

f:id:una_unagi:20180411000530g:plain

「だから、グリッドに合わせたら、その位置を変数に保存しておいて、その位置からグリッド1個分以上離れた位置に動かすまで、次の位置合わせはしない。こうすることで、ちょっとだけ動いた時は無視するようになる。Locationを元の位置に戻さないから、そのままマウスでドラッグしていける」

妹「おおお? でもどうしてこうなるのかよくわからないな……これ最初の位置ってどこなの? 位置合わせする前の」

「それはどこでもいいよ。初期値の0のままでも。遠くだったら最初に位置合わせが発生するし。位置合わせが反応しないほど近くで、かつグリッドからズレてる場合も、動かしてるうちにフィットするから」

プロシージャルでグリッドに合わせる足場

f:id:una_unagi:20180409230601g:plain

妹「前回の足場をいろいろ改良している」

imoue.hatenablog.com
前回の足場

f:id:una_unagi:20180409230319p:plain

妹「まず、今回のと違う形のメッシュにも対応したかったから、メッシュのバウンディングボックスの大きさを調べて、それを元に計算するようにした。これは上手くいってると思う」

f:id:una_unagi:20180409230329p:plain

妹「そして大きさをキッチリ揃えたいから、自分でグリッドのサイズを設定して、その単位で動くようにしたんだけど、なんかちゃんと動いたり動かなかったりするような気がする。特にLengthパラメータ側じゃなくて、根元のほうがおかしい気が」

「試してみたかんじだと、UE4のエディタ側でグリッドを有効にすると全部想定通りになるけど、無効だと変な感じになるね」

妹「えっ、じゃあわたしが作ったやつ意味ない?」

「そういうわけでもなく、元のGridだと、たとえば現在地が470だと、570、670って増えていくから、そこを100の倍数に揃えてる効果はある」

妹「そうなのか……でもなんで変になるんだろう?」

「マウスドラッグ中に、100の倍数にLocationをセットされたり、マウスカーソルの位置に引っ張られたり、一進一退の攻防が内部で起きてるのかも。でもLengthの方はマウス離した時点で正常になるけど、根元の方に関してはそれとも違うような。動かそうとしても全然動かないわけじゃなくて、たまにぴょいっと動いたりするし。なんだろう?」

妹「なんだろう……」