2016-04-24 9 views
0

私は洞窟トンネルを通って宇宙船を飛行させるゲームを作っています。問題は、最高のビデオはここに表示されます。宇宙船キャラクターコントローラーが壁に突き刺さった

https://www.youtube.com/watch?v=0K2WdeL7f0A

移動は文字コントローラーとスクリプトを使用して制御されます。スクリプトはcontroller.Move(<vector>)を呼び出すだけで、ベクトルは任意の方向に配置できます。

文字コントローラーの設定は次のとおりです。

Slope Limit: 180 
Step Offset: 0.5 
Skin Width: 0.3 
Min Move Distance: 0 
Center: (0,0,0) 
Radius: 3 
Height: 0.5 

コライダーが効果的に球です。私はまた、その接触面がcollisionFlagsであることを確認しました。私はまた、衝突者physicMaterialに0の摩擦を加え、少しの弾力(0.5)を加えました。しかし、これに関係なく、私はキャラクターが立ち往生するのを防ぐことができません。

キャラクターが壁に詰まるのを防ぐにはどうすればよいですか?

+1

ステータスレポートを送信いただきありがとうございます。あなたが聞くことを意図した質問*がありましたか? – spencer7593

+0

controller.Moveメソッドの本体は何ですか? –

+0

変換機能を使用して文字を移動すると、物理エンジンの計算が無効になります。ですから、transform関数の代わりに 'rigidbody.AddForce(directionVector)'を使うと、おそらく問題が解決します。 –

答えて

0

私はいくつかの実験の後、この問題を解決しました。翻訳デルタを使用して船の動きを制御していたので、私は自分自身の速度を表すベクトル3変数を維持しました。問題は、衝突時に、速度ベクトルを更新して衝突の方向に減速しないことでした。次のコードで解決しました:

void OnControllerColliderHit(ControllerColliderHit hit) 
{ 
    float velocityReduction = Vector3.Dot(velocity, hit.normal); 
    velocity = velocity - velocityReduction * hit.normal; 
} 
関連する問題