2016-11-29 7 views
3

確認検査のために:Blocking wallボックスコリダーと剛体を設定しても、キャラクターがオブジェクトを通過するのはなぜですか?

確認検査がために:character

それはまだ遮断壁を通過します。文字でのスクリプトの中で

if (Input.GetKey(KeyCode.UpArrow)) 
     { 
      transform.Translate(Vector3.forward * 15 * Time.deltaTime); 
     } 
if (Input.GetKey(KeyCode.DownArrow)) 
     { 
      transform.Translate(-Vector3.forward * 15 * Time.deltaTime); 
     } 
+0

コライダーウィールは定義されていますか?おそらく衝突部分が予想よりも低い – El0din

+0

ブロック壁から剛体を取り外すようにしてください。 [このページ](https://docs.unity3d.com/Manual/CollidersOverview.html)を参考にして、静的コライダーのセクションを参照してください。 – CaTs

答えて

1

プレーヤー/オブジェクトを移動するrigidbody.AddForce関数を使用します。 変換を変換するのは、移動よりも瞬間移動に近いです。そのため、あなたのオブジェクトはトランスフォームで壁の反対側にテレポートします。 チェックrigidbody.AddForce移動方法については、このリンク:あなたはまた、代わりに、離散の連続に衝突検出を設定する必要があります1
Unity - Moving the player

を更新。

0

まずは、あなたはあなたの壁に剛体のコンポーネントを必要とします。コライダー自体が衝突を引き起こします。

Unity物理学が正しく機能するためには、変換位置を直接変更するのではなく、力を使ってキャラクタを動かすべきです。あなたのコンポーネントが正しく設定されている

void FixedUpdate() { 

Rigidbody rb = this.GetComponent<Rigidbody>(); 

    if (Input.GetKey(KeyCode.UpArrow)) 
    { 
     rb.AddForce(Vector3.forward * 15f); 
    } 
    if (Input.GetKey(KeyCode.DownArrow)) 
    { 
     rb.AddForce(-Vector3.forward * 15f); 
    } 

} 
+0

体を前方に移動させずにz軸だけ進む場合はどうすればよいですか?これをどうやって変えるのですか? –

1

これを試してみてください文字と壁の両方の文字とコライダーで 1剛体。

Greg:より現実的な方法でキャラクターを移動したい場合(単体物理をベースにして)、AddForceを使用するようにコードを変更することができます。ただし、必須ではありません。あなたが宇宙の侵略者のゲームのようなことをしているなら、あなたがしているようにキャラクターを動かすことは大丈夫です。

もう1つのことを考慮する必要があります壁の衝突の可能性が薄すぎます。その場合、単一性は衝突を適切に検出することができませんでした。

1

オブジェクトが急に動いている場合は、インスペクタでCollision Detection: Descrete to a Continuousを変更したい場合があります。また、剛体の速度を移動の代わりに変更することもできます。

また、 3Dオブジェクトと2Dオブジェクトを組み合わせて使用​​していないことを確認してください。彼らは一致しません。 2Dオブジェクトは3Dオブジェクトと衝突しません。

RigidBody rb; 

void Start() { 
    rb = GetComponent<RigidBody>(); 
} 


void Update() { 
    if (Input.GetKey(KeyCode.UpArrow)) 
    { 
     rb.velocity = Vector3.forward * 15 * Time.deltaTime; 
    } 
    if (Input.GetKey(KeyCode.DownArrow)) 
    { 
     rb.velocity = -Vector3.forward * 15 * Time.deltaTime; 
    } 
} 

免責事項:値を少し調整する必要があるかもしれません!

+0

体を前方に移動させずにz軸だけ進む場合はどうすればよいですか?これをどうやって変えるのですか? –

+0

Vector3を変更します。あなたの希望する方向を表す何かに進む。 (Forwardはz軸でなければなりません) "new Vector3(0、0、1)"と0、0、-1を使用してすべてを書き出すか、簡略表の1つ、forward、back、up、downを使用できます。 https://docs.unity3d.com/ScriptReference/Vector3.html – Maakep

関連する問題