NeosVR開発用メモ書き - バイク

この記事を公開してる時点では未完成品です。
制御が甘くひっくり返ったりバグったりすることがある為、
ゲームなどに使うことはできず、後発の開発者用の資料的な側面が強いです。

入手方法

拙作のツール置き場のワールドから入手可能(NeosVRが開きます)
http://cloudx.azurewebsites.net/open/world/U-e1ght...

操作方法

ボディの上辺の真ん中あたりをクリックするとメニューが出てきて乗車可能になる。

乗車後
右手のプライマリで加速、離すとブレーキ
ハンドルでを握って動かすことで旋回
セカンダリでバイクから降りる

仕組み

主に前輪、後輪、ボティ、ハンドルの4つの要素から成り立っています。
基本的な親子構造はボディを親としてその下に前輪後輪などが置かれています。

衝突判定

タイヤの部分にStaticのコライダーとActiveのコライダーを二つ入れています。
メッシュコライダーに対応するための措置です。
下記のページ内のリストを参考にしてますが、バージョンが上がって変わってる可能性あり。
https://neoslogix.memo.wiki/d/%be%d7%c6%cd%a4%b7%a...

よく言えばなんにでも反応してくれますが、
悪く言うと意図にかかわらずあらゆる判定に反応します。
ワールドによっては透明な衝突判定にぶつかってしまうこともあり。

衝突と落下時のタイヤの制御について

前輪を例にすると、
地面などと衝突している場合、
1:後輪を親にして、前輪ボディハンドル等すべてを後輪の子にする。
2:後輪を必要な分だけ回転させる(今回の場合は地面に触れてる時間に所定の角度をかけて回している)
3:親子関係を元に戻す。
地面などに一切衝突していない場合、
1:後輪を親にして、前輪ボディハンドル等すべてを後輪の子にする。
2:後輪を必要な分だけ逆方向に回転させる(今回の場合は地面に触れていない時間に所定の角度をかけて回している)
3:親子関係を元に戻す。
といった感じ。
後輪も前後逆なだけで全く同じ仕組みにしています。
親子関係は元に戻しておかないと変形するなどの不具合が発生する。

重力に従って落ちる処理は個別には入れていません。
仕組みとして前輪後輪ともに衝突していない場合、
1:後輪を軸に前輪が下に回転して落ちる
2:前輪を軸に後輪が下に回転して落ちる
を1フレーム毎に繰り返しているため、傍から見ると結果として重力に従って落ちてるように見えます。
現状不完全ですが、前輪後輪は回転しすぎないように角度に制限をかけています。

問題点

現状衝突してるかしてないかのみを頼りに制御している影響で、
細かく跳ねて戻ってを繰り返し視点がガクガクする。
衝突判定が反映されずにすり抜けて落下する場合がある。
制御をすり抜けてさかさまにひっくり変える場合がある。

改善案

1:プライマリで加速ではなく、ハンドルをひねって加速減速が出来るようにしたい。
Jointを使うと良いと思われるが、手の位置が固定されないので現状思った通りの動作は実現できていない。

2:Raycastを使うと衝突点までの距離等細かい情報が取れるので、
これを使ってループ文を回すか、細かい角度計算をして最適な位置に車体を回転させるのが良いと思われる。
車体とタイヤの構造を変えれば回転なんて面倒なことをせずに衝突点までタイヤを上昇させるだけで良いが、
現状中の人にいい案が浮かんでいない