2017-01-28 14 views
1

私はトップダウンゲームの基礎を作ろうとしています。2D Playerが壁を移動するのを防ぐ

私は現在、ボックスコライダー2DでKinematic RigidBody2Dが適用されたプレーヤースプライトを持っています。このスプライトのスケールは(1,1)です。

壁スプライトには、スケールが(20,1)のボックスコライダーがあります。

プレーヤーを制御するには、次のコードを使用しています。代わりに壁に当たらないプレーヤー下の壁にヒットしようとするが、とき、それがなかったかのように、私はプレーヤーを制御し、それらを上下に移動することができ、上記のコードで

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 


public class PlayerMovement : MonoBehaviour { 
    public Rigidbody2D rb2D; 
    void Start() { 
     rb2D = GetComponent<Rigidbody2D>(); 
    } 
    void FixedUpdate() { 
     if (Input.GetKey (KeyCode.UpArrow)) { 
      Vector2 move = new Vector2(0,1); 
      rb2D.MovePosition(rb2D.position + move); 
     } 
     if (Input.GetKey (KeyCode.DownArrow)) { 
      Vector2 move = new Vector2(0,-1); 
      rb2D.MovePosition(rb2D.position + move); 
     } 
    } 
} 

は、それを通過します。

私はUnityにとって初めてですので、他に有用な情報があれば教えてください。私の質問を更新します。

ありがとうございます!

+0

壁にコライダーが付いていますか? –

答えて

0

RigidBody2DコンポーネントのIsKinematicプロパティのチェックを外します。 にisKinematicを設定すると、あなたのgameObjectませがどの物理または重力力の影響を受けます作るためです。

さらにの壁面IsTriggerとマークされていないことを確認してください。あなたの壁のColliderコンポーネントでそれをチェックしてください。

+0

ご返信ありがとうございます。私は今、別のチュートリアルに従っていますが、同じ問題にまだ遭遇しています。このチュートリアルでは、MovePositionではなくentity.positioを使用して文字を移動しています。 私はあなたの提案を変更しました。私はこのhttp://i.imgur.com/6FRQi7V.gifvを残しています –

+0

は 'BoxCollider2D'をグラス領域に置いていますか?はいの場合は、それが 'トリガー'ではないことを確認し、またurプレーヤーをチェックしてください。彼は 'rigidBody2D'コンポーネントをそれに付けるべきです! – utkdub

+1

私は個人的には、「MovePosition」という悪い経験をしています。あなたの 'Rigidbody2D'の' velocity'を直接設定してみてください。 –

関連する問題