2010年5月14日金曜日

シャトルの回転

シャトルはもともと操作する事も考えて、回転や移動は視野に入れていたのですが、以前、シャトルを呼び出した時のシャトルの向きをプレイヤーの向いてる方向にあわせようとした時、難題に直面してしばらく放置してました。
けっこう作り終わった後だったので、後の祭りな感じで。
けっこうな作業量でしたが、なんとかなりそうです。

他の方が、同じ過ちをおかさないためにも経緯を書いておこうかと思います。

ヴァニラのオブジェクトは、オブジェクトの中心が、起点0,0,0になっているように見えるのだけど
私は適当にエクスポートしてたので、オブジェクトの中心が 0,0,0とは限らない状態。

およそ中心に寄ってるので、CSでオブジェクト配置するにあたっては不都合がないわけですが。

スクリプトで回転させるとなると、その起点と中心の差分を回転前に引いてやって、回転後に、配置させるべき座標回転させた上で足してやら無いといけないのですが、その差分を計算するには、厳密な縮尺のデータが必要なので、縮尺とか中心とか適当にやってると、ほぼ不可能なようです。

試しにやってみたのですが、だいたい位置はあってるものの、中心が0,0,0では無いので、その分の誤差が目に見えて分かるような状態だった。

例えば、あるコンテナは左隅が0,0,0なので、シャトルの向きが角度0で、コンテナも角度0で、シャトルの壁辺りに配置すると、シャトルの向きを角度90にして、コンテナの角度も90にしてやると、コンテナが壁にめり込むような事になる。
座標のみを計算で回転させても、オブジェクトの中心がずれてるので、そのずれてる分の差分も考慮してやら無いといけないわけです。

オブジェクト自体、CS wiki にあるような、グリッドにフィットする推奨する縮尺では作られていないので、まあ、後の祭り。

で、今更エクスポートしなおして、中心を合わせるのは。かなりの作業量のような気がするわけで。
Blenderでオブジェクトの親子関係と相対位置をくずさずに楽に移動させる方法もよく分からないし。

Cursor 0,0,0 に移動して、Center Cursor やっただけじゃ、親とか子とか、コリジョンとか、付いてこないのです。

相対位置崩さずに移動させるには末端の子から順に親を解除して、それによって移動したオブジェクトいったん Center New やって SHIFT + S で Select Centerやって Center Cursor でオブジェクトの本来の位置に戻して、それから、仮のルート作って 0,0,0 に移動して、オブジェクトの親子関係設定しなおして・・・とやらないといけないような気がするわけで。

で。

シャトル本体と、シャトルに置いたオブジェクトが、それらを同じパラメータで回転操作をした場合に、ずれる事なく本来の位置にオブジェクトを配置するには3つの方法が考えられます。

うち2つは、先に述べたように、不可能なので除外。
残る方法はオブジェクトをモデラーで配置して、そのままの座標でエクスポートして、移動することなく、回転のみ行う。

ということで、シャトルに関しては、それをやる事にしました。
使い回しがスマートにはできなくなってしまうが、致し方あるまい。

避けては通れないので、かなり面倒だったが、なんとかドアの作業は終わった。
アニメーションデータも Rot しか含んでないのに、座標がそのアニメーションデータを作成した時の位置に移動してしまうようで、使い回しがまったく出来なくて、大変だった。

残るはコンテナとベンチです。
ドアに比べれば、かなり楽・・・。

ということで、シャトルの中身は、また空になってしまった(TT
が、ドアのステップの角度は前よりいい感じになっているかもしれない。

0 件のコメント:

コメントを投稿