ボルトがお尻に食い込んで気になるのでなんとかしました。
XP32MSSEには動的に各種武器の位置変更や構えを切り替えるStylesという機能があります。理由があってStylesは使いたくないので自分で実装する、XP32MSSEの実装に関する解説、という話になります。
矢筒の位置はSkeletonファイルにて定義されている
Skeletonファイルは女性なら以下の場所にあります。
meshes\actors\character\character assets female\skeleton_female.nif
このメッシュファイルの中にあるQUIVERというノードが矢筒の位置になります。
矢もボルトも共通です。同じ位置に装着されます。ゲームの中では矢が背中に、ボルトは腰に装着されますが、矢筒のメッシュで向きが違うのでそのように見えるだけで、装着座標は同じということのようです。
つまり、ボルトに合わせて位置を調整すると矢の位置が狂うので、うまくいかないということです。
クロスボウはDLCのドーンガードにて追加された武器です。変更点を最小限にして実現したと見るか、いい加減な仕事だと見るかは人それぞれですね。
ボルトのメッシュを編集して力技で対応する
ボルトは種類がいくつかあるので、それぞれ編集して直すのは大変です。Modでメッシュが差し替えられることもありますし、Skeletonで位置を調整したのでメッシュも編集のやり直し、となっては大変です。
この方法は効率が悪く、美しくないので、極力避けたほうがいいでしょう。
Skeletonを動的に修正する
RaceMenuに付属しているNiOverrideというモジュールは、ゲーム内にて動的にノードの位置を変更できます。XP32MSSEのStylesもこのNiOverrideを使って処理しています。
ボルトの位置を変更するコードは以下になります。
NiOverride.SetNodeDestination(PlayerRef, false, true, "QUIVER", "MOV BOLTChesko") NiOverride.SetNodeDestination(PlayerRef, true, true, "QUIVER", "MOV BOLTChesko") NiOverride.UpdateNodeTransform(PlayerRef, false, true, "QUIVER") NiOverride.UpdateNodeTransform(PlayerRef, true, true, "QUIVER")
MOV BOLTCheskoがボルトの位置になります。skeletonファイル内にてノードが定義されていることが前提です。
XP32MSSEのskeletonファイルはこういったノードがたくさん用意されています。用意されているノードの詳細はXPMSEWeaponStyleScaleEffect.pscに記述されています。
座標を直接動かすのではなくて、既存のノードの位置に持ってくるという処理になっています。この方が自分で微調整ができたりと自由度が高いです。
元に戻すコードは以下になります。
NiOverride.SetNodeDestination(PlayerRef, false, true, "QUIVER", "MOV QUIVERDefault") NiOverride.SetNodeDestination(PlayerRef, true, true, "QUIVER", "MOV QUIVERDefault") NiOverride.UpdateNodeTransform(PlayerRef, false, true, "QUIVER") NiOverride.UpdateNodeTransform(PlayerRef, true, true, "QUIVER") NiOverride.RemoveNodeDestination(PlayerRef, false, true, "QUIVER") NiOverride.RemoveNodeDestination(PlayerRef, true, true, "QUIVER") NiOverride.UpdateNodeTransform(PlayerRef, false, true, "QUIVER") NiOverride.UpdateNodeTransform(PlayerRef, true, true, "QUIVER")
あとはタイミングを決めて実行すればいいだけです。
Equipment Managerに実装してみました。
アニメーションで動き方が変化する
詳細は不明ですが、アニメーション(弓のモーション)をかえたところ、矢筒の位置や動き方が変化しました。
おそらく、各ボーンの動き方が変化したことに伴い、矢筒のノードの動き方も変化したのだと思います。
つまり、スケルトンに定義されている矢筒位置指定用ボーンは主にバニラアニメーション用なので、アニメーションを変えるなら、そのアニメーションに合わせて調整が必要になってくるということだと思います。
そこで、あらためて「MOV Boltなんとか」のノードをひと通り確認してみたところ、親ノードがそれぞれ違うことがわかりました。MOV BoltDefaultだとNPC Spine2なので背骨になっていました。MOV BOLTLeftHipBoltだとNPC Pelvisなので骨盤になります。ですから、お尻をクネクネさせるアニメーションだとPelvisがクネクネするので、ボルトをBOLTLeftHipBoltに持ってくるとボルトもクネクネするということになります。