2011年9月17日土曜日

【Unity】地表にそって移動する

地表に対し一定高度を保って移動する箱

    ユニットを起伏のある地形に沿ってどう移動させるかを考えていた。



    Rigidbodyを使うとユニットは少なくとも地形の当たり判定を使って起伏に合わせて移動可能である。しかし重力にひかれるため急傾斜ではずり落ちてしまう。そして重力をオフにすると落下しないから谷間を飛び越えて移動してしまう。別の問題もある。Rigidbodyは繊細すぎる。地形の微細な変化にも過敏に反応してユニットの軸がふらつく。

    そこで「レーダー高度計」を開発した。これはユニットが真下の地形に対しrayを照射して高度を確認し、高度が一定幅の値を逸脱すると上下に移動して高度を一定に保つ仕組みになっている。こうすることでユニットは地形の起伏にそって移動することが可能になる。真下だけでなく少し前方の地形も測定することで平坦な地形なのか上り坂なのか下り坂なのかも知ることが出来るようになり、上り坂では移動速度を落とすといったことも可能になる(Rigidbodyを使う場合はユニットの傾きでの判定を考えていた)。

    現在試験中で上手く行きそうならユニットの移動制御スクリプトに組み込む予定。しかし基本的なことを見落としてないか不安だ。どうも凝り過ぎてて。もっとコンポネントを使った単純な方法があるんじゃないだろうか。

2 件のコメント:

匿名 さんのコメント...

iTweenのサンプルにterrainの表面に沿って移動するサンプルスクリプト付きデモがあった気がします。

カノコガ/kanokoga さんのコメント...

rigidbodyの動きに軸ごとの制限をかけたら普通に問題なく動きました。考え過ぎだったようですね…