2010年6月4日金曜日

進捗。シャトルのfurniture marker その2

どうやら、enable の前に moveto しないと
furniture marker が、おかしくなってしまうらしい。
ただの Activator のように、プレイヤーがそれに向ってひたすら直進してしまう。
Player.GetSittingで値を見ても 0 のままになる。


着陸アニメーションでの回転操作のロジックで効率化を図るためにいろいろ処理を削っていたのだが、そのせいだった模様。

(1). shuttle.disable
(2). moveto player で現在のワールドスペース、セルに移動
(3). shuttle.enable
(4). getpos で呼び出した直後の位置を取得
(5). setpos で (4)の値に高度と方向を加えてアニメーション
(6). (5) を地上付近の所定の位置まで繰り返す

最後にコリジョンを正すためにアップデート
(7). shuttle.disable
(8). getpos,setpos
(9). shuttle.enable

のような感じになっていた。

CSWiki のTutorial にある、おなじみの推奨されるオブジェクトの移動方法なのだが

disable, moveto, enable, getpos, setpos

というのがある。

CSWiki:MoveTo

この王道のやり方を変えると、いろいろと問題が出るのは分かっていたことだが

基本 disable して enable すれば、なんとかなる
と思っていたのは間違いだった模様。

コリジョンは確かに正されるが、それ以外は何ともいえないという事なのかも。
moveto は playerの周辺に1回やれば良いかと思っていた。

で、この操作を行うオブジェクトが1つではないので、最初と最後で、これをやるのは、コードが巨大になって、スクリプトのサイズ制限に引っかかりそうだったので (7)-(9)までをブロック化し、(8)の前に moveto を入れた。

で、きちんと座れるようになった。

ソファベッドで、最初座れないのに、ソファとベッドの切り替えのアニメーション後には、座れるようになっていたのは、そのスイッチ型のアクティベーターのアニメーションスクリプトでmoveto が呼ばれていたため。

以上。


関連: 進捗。シャトルのfurniture marker

0 件のコメント:

コメントを投稿