2017-02-08 3 views
3

私はUnity 2Dの非常に基本的なテストを行っています。私が抱えている問題は、スプライトが地面に衝突してイベントが常に頻繁にチェックされていることです。スプライトはリムボーに残ります。それは、それがすぐに上下に起こって回って回るように指示するときに、地面を離れる機会を持たない。 下のクリップに示すように:私が欲しいもの補間オブジェクトの衝突が発生しました

https://m.youtube.com/watch?v=gPmmLjGe9iQ

は接触が行われたときにスプライトが、それはY軸方向です変更する必要があります。以下の私のコードを見てください。

void Update() { 
    hitWall = Physics2D.OverlapCircle(wallCheckUp.position, wallCheckRadius, whatIsWall); 
    if (hitWall) 
    { 
     moveUp = !moveUp; 
    } 

    if (moveUp) 
    { 
     transform.localScale = new Vector3(-1f, 1f, 1f); 
     GetComponent<Rigidbody2D>().velocity = new Vector2(speed, GetComponent<Rigidbody2D>().velocity.x); 
    } 
    else 
    { 
     transform.localScale = new Vector3(1f, 1f, 1f); 
     GetComponent<Rigidbody2D>().velocity = new Vector2(-speed, GetComponent<Rigidbody2D>().velocity.x); 
    } 
} 

さらに詳しい情報が必要な場合はお知らせください。私が明確に持っているものにするために

EDIT

私のスプライトの設定を参照してください。任意の重複のため

enter image description here

+0

なぜ、あなたは完全に 'Rigidbody'(手動で' velocity'を設定する)を誤って使用しているのだろうか、それを正しく使用する方法についてドキュメントをチェックしてください。 – Aybe

+0

私はまだ学んでいます。私はこのチュートリアルの基礎をオンラインチュートリアルから得ましたが、それは左右の動きのためのものでした。私は必要なものを手に入れようと試みました。 – Phil3992

+0

基本的には、 'Rigidbody'で' Add *(Vector3) 'メソッドを使うだけで、' PhysicsMaterial'に目的のボーイングを割り当ててから、必要に応じて微調整してください。 – Aybe

答えて

1

OverlapCircleチェック、限り、それと対象物との間に重なりがあるとして、それはこのように、それは本当だと、すべてのフレームのためのあなたのif文を実行し、trueになりますので、もし。 (ちょうどメソッドの名前を置き換え)メソッドOnCollisonEnter2DまたはOnTriggerEnter2Dを使用してみてください:

void OnCollisionEnter2D(Collision2D coll) 
{ 
    moveUp = !moveUp; 
    if (moveUp) 
    { 
     transform.localScale = new Vector3(-1f, 1f, 1f); 
     GetComponent<Rigidbody2D>().velocity = new Vector2(speed, GetComponent<Rigidbody2D>().velocity.y); 
    } 
    else 
    { 
     transform.localScale = new Vector3(1f, 1f, 1f); 
     GetComponent<Rigidbody2D>().velocity = new Vector2(-speed, GetComponent<Rigidbody2D>().velocity.y); 
    } 
} 

また、あなたのオブジェクトそれぞれがインスペクタでCollider2Dを持っていることを確認してください。

もう1つ。 Vector2を初期化するとき、引数の順序はx、yです。あなたのコードで、y(垂直)コンポーネントの引数にGetComponent()。velocity.x(horizo​​ntal)を使用していたことに気付きました。スプライトが上下に動いている場合は、yコンポーネントが変更されていないため(xコンポーネントを変更する他のコードがない限り)、エラーの原因になる可能性があります。

ですから、

new vector2(GetComponent<Rigidbody2d>().velocity.x, speed[-speed]) 

new vector2(speed[-speed], GetComponent<Rigidbody2d>().velocity.x) 

を変更したいが、これは助けを願っています。

+0

編集:誤って余分な閉じ括弧を入れてコードを修正しました –

+0

ああ、残念です。私は別の解決策を見つけようとします。 1つの質問ですが、スプライトが上下左右に動いていますか? –

関連する問題