さて、Attachの処理を正しく整えよう。
AttachToComponent の機能に何かないだろうか?
第2引数の FAttachmentTransformRules に
KeepRelativeTransform というものがあった。
これでいいのでは?
全然だめだ。どこかに消えた。
Relativeというのはアタッチ親との相対位置を保持するといういみではないのか。
だとすると KeepWorldTransform だろうか。
きっと子のオブジェクトのWorldTransformを保持するという意味だろう。
正解。
これで手とオブジェクトの元の相対位置関係が保持されたままアタッチできるようになった。
----
次。
ゲームに登場する想定の各種オブジェクトについて
"掴み方"を洗い出してみた。
以下のカテゴリに分類できそう。
(1) 掴んで振り回せる物。
(1-1) 任意の場所がつかめる物。
・両手でもつかめる。
(1-2) 掴める場所が決まっている物。
・掴める場所は複数ある。
・両手でつかむ場合は、2個めの手用の掴める場所が決まっている。
(2) 掴んでも振り回せず、一部が拘束されているもの。
・ドアとか。
(3) 掴んでも動かせないもの。
・手すりとか。
・力が強ければ外せる?ものもある。
(4) そもそも掴まなくても手で押せる物。
ここから必要な機能を洗い出せる。
・両手で持つ機能
・掴める場所をオブジェクトに埋め込める機能
・オブジェクトから"掴める場所"情報をもらって、その位置にアタッチする機能
・まだ掴んでいない場合と、すでに片手で掴んでいる場合とで、異なる"掴める場所"情報を渡せる機能
・オブジェクトを手に、ではなく手をオブジェクトにアタッチする機能
・オブジェクトにアタッチした手を動かすことで、オブジェクトに力を加えて動かす機能
・オブジェクトの一部を拘束して動きを制御する機能
・そもそも掴まなくても手でオブジェクトを押せるようにする機能
どこから手を付けようか。
そういえば、手でオブジェクトを押せる、といえば
最近、高速移動時に動けなくなることがある。
どうも手のアタリにぶつかって止められているような気がしている。
さらに先ほど気づいたが、どうやら手に持ったオブジェクトのアタリにも邪魔をされることがあるようだ。
さて、これはどう解決したらよいものか。
まずは現象を理解するところから。