2016-08-07 4 views
0

私は、Google CardboardのVR迷路ゲームを、プレーヤーを動かすスクリプトとしてhttps://github.com/JuppOtto/Google-Cardboard/blob/master/Autowalk.csで構築しています。今まで私は何も助けてくれなかったし、私は物理材料、頑丈な凍結/解凍の解除、アンギュラネスへのアンギュラ玉の設定などをやってみた。壁に衝突するとリジッドボディキャラクターが跳ね返る(Autowalk.cs)

私が習ったように、問題私のリジッドボディがそれらにメッシュコライダーを持っている壁に突き刺さっていて、それが戻ってきて、この奇妙な "弾むような行動"を引き起こしているはずです。 Rigidbodyのキャラクターは、たとえできないとしても、壁を突き抜けようとしているような気がします。

ほとんどの場合、これはあまりにも大きな問題ではありませんが、メッシュのコライダーを持っている小さなオブジェクトを持つゲームのコーナーがいくつかあり、プレイヤーがこれらのオブジェクトとそれらは単にゲームエリアから壁全体に押し出される(バウンスされる)。

ここに私のキャラクターの移動のための責任があると私は、これは何か他のものに変更する必要があると考えているビットがあります:

if (isWalking) 
{ 
    Vector3 direction = new Vector3(head.transform.forward.x, 0, head.transform.forward.z).normalized * speed * Time.deltaTime; 
    Quaternion rotation = Quaternion.Euler(new Vector3(0, -transform.rotation.eulerAngles.y, 0)); 
    transform.Translate(rotation * direction); 
} 

そしてここでは、私の設定に関するいくつかの情報です:あり

キャラクター運動スクリプトには、カプセル衝突器と質量1の剛体があります。ドラッグ&アンギュラドラッグ:0;重力を使用していますが、キネマティックではなく、衝突検出を離散に設定して補間をなしに設定しています。位置は固定されていませんが、回転はすべてのX、Y、Z座標に適用され、転倒しません。

壁(3Dモデル)には単純なメッシュコライダーがありますが、これ以上のものはありません。

私は、キャラクターが壁に衝突したときに停止するだけでなく、トリガーを使用しているとは思わないと言いたいと思います。そのようなことは良い考えです。完全に止めることは、プレーヤーが直面しているときに壁に衝突する場合にのみ許容されますが、角度がある場合、プレーヤーは壁に沿って「スライド」します。

答えて

1

リジッドボディコンポーネントを削除し、代わりにプレーヤでCharacterControllerコンポーネントを使用し、プレーヤを翻訳する代わりにSimpleMove関数を使用することもできます。変換機能は、プレーヤーを新しいベクトル位置に設定します。プレーヤーは、壁に衝突する代わりに壁と交差します。

+0

ご意見ありがとうございます。 CharacterControllerへの切り替えは私が最終的にやっていたもので、私のためにすべてを修正したので、これを受け入れられた答えとして選択しました。 – ynef

0

interpolationをオンにして(Interpolateに設定)、剛体にisKinematicを設定し、代わりにRigidbody.MovePositionを使用する必要があります。 MovePositionは、与えられた位置にを補間し、Rigidbodyがオブジェクトを通過することを可能にするではなく、を補間する。代わりにtransform.positionまたはRigidbody.positionテレポートRigidbodyを設定してください。これは望ましくない可能性があります。

RigidbodyをチャックしてCharacterControllerを使用することもできます。これにより、剛体を常に扱わなくても簡単に文字を移動できます。

+0

この特定のスクリプトでMovePositionをどのように正確に使用する必要がありますか?私はrb.MovePosition(回転*方向)を試みた。これはちょうどそれがつかまえた壁の中のプレーヤーの半分をテレポートしました。 – ynef

+0

@ynef手動で方向を回転させる代わりに、代わりにローカル空間座標を使用してください。ローカル空間の方向を計算し、ワールド空間に変換し、代わりに 'MovePosition'を使います。 – EvilTak

関連する問題