2017-04-18 5 views
1

ユニティで2Dウォールを作りましたが、私のキャラクターはそれを歩くことができます。どうしましたか?私のキャラクターにはRigibody2DとBoxCollider2Dがあり、壁にはボックスコライダーがあります。キャラクターの動きの コード:2Dでコリジョンが動作しない

Vector2 moveVec = new Vector2(CrossPlatformInputManager.GetAxis("Horizontal"),CrossPlatformInputManager.GetAxis("Vertical")); 
    moveVec = moveVec * moveForce; 
    transform.Translate (moveVec); 
+0

あなたのキャラクターはBoxCollider2Dを持っていますか(最後に2Dを書き留めてください)。あなたの壁にも同じです。 –

+0

はい、BoxCollider2Dがあります – Sleeper

+0

transform.Translateの代わりにrigidbody.MovePositionを使用しようとしています。また、コリジョンマスクとオブジェクトのレイヤーを確認してください –

答えて

2

私のキャラクターはRigibody2DとBoxCollider

あなたがRigibody2Dを使用する場合は、あなたもないBoxColliderBoxCollider2Dを使用する必要があります。壁にはBoxCollider2Dもあることを確認してください。

transform.Translateまたはtransform.positionを使用してオブジェクトを移動すると、衝突しません。 GameObjectにRigidbody2D が添付されている場合は、Rigidbody2D.velocity,Rigidbody2D.AddForceRigidbody2D.AddXXX)またはRigidbody2D.MovePositionで移動する必要があります。

FixedUpdate()機能でこの特定のことを行う方が良いです。また、の代わりにGetAxisRawを使用して、プレーヤーが停止するようにしてください。すぐにキー/指が離されます。

public float speed = 2f; 
Rigidbody2D rg2d; 

void Start() 
{ 
    rg2d = GetComponent<Rigidbody2D>(); 
} 


void FixedUpdate() 
{ 
    float h = CrossPlatformInputManager.GetAxisRaw("Horizontal"); 
    float v = CrossPlatformInputManager.GetAxisRaw("Vertical"); 

    Vector2 tempVect = new Vector2(h, v); 
    tempVect = tempVect.normalized * speed * Time.fixedDeltaTime; 
    rg2d.MovePosition((Vector2)transform.position + tempVect); 
} 

速度が速すぎたり遅くなったりすると、いつでも速度を下げたり上げたりすることができます。

+1

あなたはTime.fixedDeltaTimeを使うべきです。 –

+0

@JuanBayonaBerisoそうです。ヘッドアップをありがとう。ありがとう、 – Programmer

+0

アップデートと固定アップデートの違いは何ですか? – Sleeper

関連する問題